0

C-Stringを定義し、ループして\0文字以外のすべての要素をXに置き換えるC++教科書の簡単な例があります。

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と比較できない理由はわかりません。ポインタを整数と比較しようとしているとは思いません...

4

5 に答える 5

3

2つの場所で一重引用符を使用する必要があります。

while(ourString[index] != '\0')
{
    ourString[index] = 'X';
    index++;
}

二重引用符があるため、文字列リテラルと見なされます。

于 2013-03-13T08:35:31.493 に答える
2

に変更"\0"'\0'ます。1つ目は、ポインターに減衰する文字列リテラルであり、コンパイラーが指示したように、ポインターを整数と比較することは許可されていません。後者は、単純な古い文字リテラルです。

同じことが、ourString[index] = "X";に変更"X"'X'ます。

そして最後の行はcout << ourString << endl;;でなければなりません。

于 2013-03-13T08:34:51.160 に答える
1

文字と文字列を混同しています。とをに切り替える必要があり"\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;
于 2013-03-13T08:35:08.603 に答える
1

replace while(ourString[index] != "\0")

while(ourString[index] != '\0')

ダブルティックをシングルティックに置き換えます。

于 2013-03-13T08:39:10.970 に答える
1

null演算子を使用しましたが、二重引用符では使用されません""常に一重引用符で使用されます'\ 0'

これを試して、、

  while(ourString[index] != '\0')
于 2013-03-13T10:09:56.643 に答える