2013-12-14 5 views
0

저는이 시점에서 상당히 고생하고 있습니다. 궁극적으로 나는 sentencereplaceSubstring으로 보내고 "the"가 "that"로 바뀌면서 같은 문장을 돌려 보내고 싶습니다. 나는 포인터를 사용해야한다는 것을 알고 있지만, 정확히 어디서, 왜 그런지는 잘 모르겠습니다. 어떤 충고? 내가 갖는cstring 내의 단어를 바꿔 쓰려고 시도합니다.

오류는 다음과 같습니다

Ch12_08.cpp: In function ‘char replaceSubstring(char*, char*, char*)’: 
Ch12_08.cpp:16: error: request for member ‘strstr’ in ‘sent’, which is of non-class type ‘char*’ 
Ch12_08.cpp:17: error: invalid conversion from ‘char*’ to ‘char’ 
Ch12_08.cpp:18: error: invalid conversion from ‘char*’ to ‘char’ 
Ch12_08.cpp: In function ‘int main()’: 
Ch12_08.cpp:30: error: expected primary-expression before ‘]’ token 

여기에 내가 함께 일하고 있어요 코드입니다 .. 사전에

#include <iostream> 
#include <cstring> // Needed for strstr to work 

using namespace std; 

char replaceSubstring(char sent[], char oldW[], char newW[]){ 
    char *strPtr = NULL; 

    strPtr = &sent.strstr(sent, oldW); 
    *strPtr = newW; 
    return sent; 
} 

int main() 
{ 
    char sentence[35] = "the dog jumped over the fence"; 
    char oldWord[5] = "the"; 
    char newWord[6] = "that"; 
    char newSentence[35] = {NULL}; 

    wcout << "The original sentence is: " << sentence << endl; 

    newSentence[] = replaceSubstring(sentence, oldWord, newWord); 


    return 0; 
} 

감사합니다!

답변

0

오류 메시지는 무엇이 잘못되었는지 정확하게 알려줍니다. strstrchar *의 멤버 함수가 아닙니다. char *은 (는) 클래스 유형이 아닙니다.

대신 strstr은 단순한 기능입니다. 이것은 아마도 당신을 위해 잘 작동합니다 :

strPtr = strstr(sent, oldW); 

oldWstrPtr에 위치를 발견하면, 당신은 oldW 이상 newW을 복사해야합니다. newWoldW이 동일한 길이라면 어렵지 않아야합니다. 그들이 다른 길이일지도 모르는 경우에 (당신의보기에서 것처럼 보이기 때문에), 당신은 당신을 위해 당신의 일을 줄였습니다.

어쨌든 strstr 이후의 행은 원하는 것을 수행하지 않습니다. 문자 등을 복사하려면 루프가 필요합니다.

마지막으로 그런 함수에서 문자 배열을 반환 할 수 없습니다. 함수가 해당 배열을 채우게하려면 인수로 newSentence을 전달해야합니다. 내

부분은 std::string 너무 좋네요이을 할 때 당신도 ... C 문자열로 응답

+0

덕분에이를하려는 이유를 궁금해. 그것은 수업을위한 것입니다. 왜 그래도 나는 궁금해. 나는 여분의 통찰력을 신경 쓰지 않는다. 그것은 우리가 배웠던 나머지 것들에 거의 직관력이없는 것처럼 보입니다. –

+0

BTW,'oldW'의 _all_ 인스턴스를'newW'로 대체하거나 첫 번째 인스턴스 만 바꾸시겠습니까? 그 질문에 대한 답은 당신이해야 할 일을 바꿉니다. –

관련 문제