2014-04-20 4 views
0

이것은 내 첫 번째 게시물입니다. 저는 프로그래밍에 익숙하지 않고 C++을 사용하여 사용자가 텍스트 블록 (최대 500 자)을 제출하고 4 자 단어를 입력 할 수있게 해주는 프로그램을 만들 수 있다고 생각했습니다. 텍스트에서 그 단어를 골라낸 시간. 나는 X 코드를 사용하고 있으며 녹색 중단 점을 만들고 'for'루프 기능에서 프로그램을 일시 중지합니다. 내 코드는 아래와 같습니다 :Xcode에서 C++을 일시 중지

#include <iostream> 
#include <string> 
#include <math.h> 
#define SPACE ' '(char) 
using namespace std; 

//Submit text (maximum 500 characters) and store in variable 
string text; 
string textQuery(string msgText) { 
do { 
cout << msgText << endl; 
    getline(cin, text); } while (text.size() > 500); 
return text; 
} 
//Query word to search for and store as variable 
string word; 
string wordQuery(string msgWord) { 

cout << msgWord << endl; 
cin >> word; 
return word; 
} 
//Using loop, run through the text to identify the word 
int counter = 0; 
bool debugCheck = false; 
int searchWord() { 

for (int i = 0; i < text.size(); i++) { 
    char ch_1 = text.at(i); 
    char ch_2 = text.at(i + 1); 
    char ch_3 = text.at(i + 2); 
    char ch_4 = text.at(i + 3); 
    cout << i; 

    if(ch_1 == word.at(0) && 
     ch_2 == word.at(1) && 
     ch_3 == word.at(2) && 
     ch_4 == word.at(3)) 
    { 

     counter++; 
     debugCheck = true; 

    } 


} 

return counter; 
} 
//cout the result 
int main() { 
string textUserSubmit = textQuery("Please submit text (max 500 characters): "); 
string wordUserSubmit = wordQuery("Please select a word to search for: "); 
int counterResponse = searchWord(); 
cout << debugCheck << endl; 
cout << "The number of times is: " << counterResponse << endl; 
return 0; 
} 

for 루프에서 오류가 발생합니다. 다른 단어, 여러 단어의 길이 및 텍스트에서 단어를 강조 표시하는 방법에 대한 내 프로그램 작동 방법에 대한 다른 조언이 도움이 될 것입니다. 누군가 내 문제를 도와 줄 수 있으면 정말 고맙겠습니다. 감사!

+0

Welcome! 'while (text.size()> 500)'루프를 버퍼 변수를 사용하는 if 문으로 변경할 수 있습니다. while 루프는 사용자가 500 자에 도달하면 무한 루프됩니다. – ultifinitus

+0

@ultifinitus 아니요, 그 프로그램의 일부분이 작동합니다. 루프는 원하는 크기 (500 자 이하)가 될 때까지 새로운 입력을 요구함으로써 입력이 '유효'한지 확인합니다. – bames53

+0

@ bames53 이봐, 네가 맞아! 웬일인지 나는 그가 그의 루프와 함께 텍스트를 추가하고있다라고 생각했다, 단지 결석하는 것을 무시한다! – ultifinitus

답변

1

for 루프에서 오류가 발생합니다.

오류가 발생했음을 설명해야합니다. 내가 코드를 실행하고 어떤 일이 일어날 지 알 수 있도록 Xcode에 액세스 할 수있게되었지만 도움이 필요한 사람들을 남겨 두도록 노력해야합니다. 디버거가 행에 프로그램을 중단하는 방법을 설명한다이 경우

:

libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string 

를 나타낸다 : "신호 SIGABRT 스레드 1"과 콘솔 출력

char ch_4 = text.at(i + 3); 

메시지를 포함

문제는 다음과 같습니다. for 루프를 사용하여 text의 올바른 범위에 i이 있는지 확인한 후 in dex이지만 그 값이 유효한지 확인하지 않고도 i+1, i+2i+3을 색인으로 사용합니다.

수표와 프로그램이 올바르게 작동하는 것으로 수정되었습니다 (올바른 입력이 있음).


기타 의견.

  • 보다 일관된 들여 쓰기를 사용하십시오. 프로그램을 읽고 따르기가 더 쉬워집니다. Here's 내가 들여 쓰는 방법 (도구 clang-format 사용).
  • #define SPACE ' '(char)은 사용하지 않더라도 나쁜 아이디어처럼 보입니다.
  • using namespace std;은 머리글에 넣지 않는 한 대개는 문제가되지 않습니다. 그래도 나는 할 수 있고 결과로 나오는 오류 메시지를 이해하지 못하기 때문에 어쨌든 그것을 피할 수 있습니다. std::을 쓰고 싶지 않다면 using std::string;using std::cout;과 같이 제한된 응용 프로그램을 사용하십시오.
  • 전역 변수는 피해야하며 textUserSubmitwordUserSubmitsearchWord()으로 전달하면됩니다.
  • text 길이가 500 자 이하인지 확인해야 할 필요는 없습니다. std::string을 사용하고 있으므로 입력 시간이 오래 걸릴 수 있습니다.
  • word 코드의 길이가 4 자 이상이어야합니다. 다행히도 at()을 사용하여 색인을 생성하므로 정의되지 않은 동작은 발생하지 않지만 계속 확인해야합니다. textQuery에서 수표를 제거하고 wordQuery에 하나를 추가합니다.
+0

내 질문에 대답 해 주셔서 감사합니다! 나는 아직도 아주 새롭다, 나는 고침이 인 무슨을 확실히 얻을 수 없다; 변경된 코드를 제출할 수 있습니까? – user3553239

+0

@ user3553239 for 루프의 체크는'i bames53

+0

i + 3을 확인해야합니다. 정말 고마워요! 정말 도움이되었습니다. – user3553239

관련 문제