2

这是代码,当我使用 CodeBlocks10.05 运行此代码时,使用没有标志的 GNU GCC 编译,我没有得到我希望的结果。我希望如果数组中的所有字符'z'不是由初始字符串文字中的一个字符或空终止符设置的,那么它会被更改为 a。

#include <iostream>
#include <string>
#include <stdlib.h>
#include <cstring>

using namespace std;

int main(void)
{
    char stringVar[10] = "Hello";
    //char stringVar[10] = {'H', 'e', 'l', 'l', 'o', '\0'};
    //char stringVar[10] = {'H', 'e', 'l', 'l', 'o'};
    //char stringVar[10] = {};

   for(int i = 0; i < 10; i++)
   {
       if(stringVar[i] != 'H' and
           stringVar[i] != 'e' and
           stringVar[i] != 'l' and
           stringVar[i] != 'o' and
           stringVar[i] != '\0')
       {
            stringVar[i] = 'z';
       }
   }

   for(int i = 0; i < 10; i++)
   {
       cout << (int)stringVar[i] << "\t" << (char)stringVar[i] << endl;
   }
   return 0;
}

这是我的输出:

72      H
101     e
108     l
108     l
111     o
0
0
0
0
0

这是我的预期:

72      H
101     e
108     l
108     l
111     o
0
122     z
122     z
122     z
122     z

那么我在这里做错了什么?谢谢!

4

1 回答 1

4
char stringVar[10] = "Hello";

将前 5 初始化为Hellorest to \0,因此您的 if 条件将为 false

if(stringVar[i] != 'H' and
   stringVar[i] != 'e' and
   stringVar[i] != 'l' and
   stringVar[i] != 'o' and
   stringVar[i] != '\0') <<------ this condition will always return false, so you can't modify `stringVar`
于 2013-02-24T02:20:09.403 回答