У меня есть простой пример из учебника C ++, который определяет C-String, а затем циклы, чтобы заменить все элементы, которые не являются символом \ 0, на X.
char ourString[5] = "Hi";
int index = 0;
while(ourString[index] != "\0")
{
ourString[index] = "X";
index++;
}
cout << ourString[] << endl;
Однако, когда я компилирую и запускаю, я получаю следующую ошибку:
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp||In function 'int main()':|
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|17|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|19|error: invalid conversion from 'const char*' to 'char' [-fpermissive]|
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|23|error: expected primary-expression before ']' token|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
Я не вижу проблемы, почему он не позволяет мне (насколько я понимаю ошибку) сравнивать элементы, которые являются символами, с символом \ 0. Я не думаю, что я пытаюсь сравнить указатель на целое число …
+ Изменить "\0"
в '\0'
, Первый — строковый литерал, который распадается на указатель, и, как сказал вам компилятор, вы не можете сравнивать указатели с целыми числами. Последний является простым старым буквальным символом.
То же самое касается ourString[index] = "X";
, менять "X"
в 'X'
,
И последняя строка должна быть cout << ourString << endl;
;
Вам нужно использовать одинарные кавычки в двух местах.
while(ourString[index] != '\0')
{
ourString[index] = 'X';
index++;
}
Поскольку у вас двойные кавычки, он считается строковым литералом.
Вы путаете персонажей со строками. Вам нужно переключить "\0"
в '\0'
а также "X"
в 'X'
, Также не стоит использовать []
на cout
утверждение — объединение этих дает:
char ourString[5] = "Hi";
int index = 0;
while(ourString[index] != '\0')
{
ourString[index] = 'X';
index++;
}
cout << ourString << endl;
Обратите внимание, что вы можете написать это в более аккуратной форме:
for( char* c = ourString; *c ; ++c) // *c is the same as *c!='\0'
{
*c='X';
}
cout << ourString << endl;
replace while(ourString[index] != "\0")
с
while(ourString[index] != '\0')
Замените двойные галочки на одиночные.
Вы использовали нулевой оператор, он не используется с двойными кавычками «», он всегда использовался с одинарными кавычками ‘\ 0’
попробуй это,,
while(ourString[index] != '\0')