2013-12-14 1 views
0

Я совсем застрял в этом пункте. В конечном счете, я хочу отправить sentence на номер replaceSubstring, а затем вернуть то же предложение с заменой на «тот». Я знаю, что должен использовать указатели, но я не уверен, где и почему именно. Любой совет?Попытка заменить слово в 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

Сообщение об ошибке сообщает вам, что именно не так: strstr не является членом функции char *. char * не является типом класса.

Скорее, strstr - это простая функция. Это вероятно, будет работать лучше для вас:

strPtr = strstr(sent, oldW); 

После того, как вы нашли где oldW в strPtr, вам нужно будет скопировать newW над oldW. Если newW и oldW имеют одинаковую длину, это не должно быть сложно. Если они могут быть различной длины (как они, кажется, в вашем примере), у вас есть работа, вырезанная для вас.

В любом случае, линия после strstr не будет делать то, что вы хотите. Вам нужен цикл для копирования символов или аналогичных.

И, наконец, вы не можете вернуть массив символов из вашей функции. Вам необходимо передать newSentence в качестве аргумента функции, если вы хотите, чтобы ваша функция заполняла этот массив.

часть меня задается вопросом, почему вы даже попробовать это со строками C, когда std::string делает это намного лучше ...

+0

Спасибо за ответ. Это для класса. Интересно, почему, хотя .. Я не против дополнительного понимания, хотя. Это просто кажется почти нелогичным для остальных вещей, которые мы изучали. –

+0

Кстати, вы должны заменить _all_ экземпляры 'oldW'' newW' или только первым? Ответ на этот вопрос меняет работу, которую вам нужно сделать. –