for循环中的数组索引 我是C++新手,遇到了一个我不知道该怎么做的问题。当我在一本书中做一些例子时,我遇到了下面的代码 for(int i=0;string[i];i++){ cout<<string[i]; } for(int i=0;字符串[i];i++){ cout

for循环中的数组索引 我是C++新手,遇到了一个我不知道该怎么做的问题。当我在一本书中做一些例子时,我遇到了下面的代码 for(int i=0;string[i];i++){ cout<<string[i]; } for(int i=0;字符串[i];i++){ cout,c++,arrays,C++,Arrays,布尔测试字符串[i]实际上只是检查是否有空字符('\0')遇到。C中的所有字符串都以空字符结尾,因此这适用于通过字符串进行正向迭代。但如果要反向进行,则不适用。您应该检查i是否大于或等于零 另外,sizeof(string)返回数据类型的大小(50字节或更多),而不是它包含的字符串的长度。要获取字符串长度,请使用strlen: for( int i = strlen(string) - 1; i >= 0; i-- ) { cout << string[i]; } f

布尔测试
字符串[i]
实际上只是检查是否有空字符(
'\0'
)遇到。C中的所有字符串都以空字符结尾,因此这适用于通过字符串进行正向迭代。但如果要反向进行,则不适用。您应该检查
i
是否大于或等于零

另外,
sizeof(string)
返回数据类型的大小(50字节或更多),而不是它包含的字符串的长度。要获取字符串长度,请使用
strlen

for( int i = strlen(string) - 1; i >= 0; i-- ) {
    cout << string[i];
}
for(int i=strlen(string)-1;i>=0;i--){

cout布尔测试
字符串[i]
实际上只是检查是否有空字符(
'\0'
)遇到。C中的所有字符串都以空字符结尾,因此这适用于通过字符串进行正向迭代。但如果要反向进行,则不适用。您应该检查
i
是否大于或等于零

另外,
sizeof(string)
返回数据类型的大小(50字节或更多),而不是它包含的字符串的长度。要获取字符串长度,请使用
strlen

for( int i = strlen(string) - 1; i >= 0; i-- ) {
    cout << string[i];
}
for(int i=strlen(string)-1;i>=0;i--){

cout在上述for循环中,使用char代替bool作为第二个参数。在这种情况下,非零值被视为“true”,零值被视为“false”

在第二段代码中,for循环不会执行,因为字符串[sizeof(string)-1]为零,并且其计算结果为“false”

如果按以下方式使用,代码将正常工作

for(int i=0;string[i];i++){

在上面的for循环中,使用char代替bool作为第二个参数。在这种情况下,非零值被视为“true”,零值被视为“false”

在第二段代码中,for循环不会执行,因为字符串[sizeof(string)-1]为零,并且其计算结果为“false”

如果按以下方式使用,代码将正常工作

for(int i=0;string[i];i++){

因为这是C++,而不是C,最好使用Buffin字符串类而不是使用字符数组。 以下是一种逐字打印字符串背面的方法:

 #include <iterator>
 ...
 typedef std::reverse_iterator<std::string::iterator> rev_iter;

 string str("This is a freaking test!");
 for(rev_iter it (str.end()); it != rev_iter(str.begin()); ++it)
     std::cout <<  *it;
 std::cout << endl;
#包括
...
类型定义标准::反向迭代器版本;
string str(“这是一个奇怪的测试!”);
for(rev_iter it(str.end());it!=rev_iter(str.begin());+it)

STD::CUT

因为这是C++,而不是C,最好使用Buffin字符串类而不是使用字符数组。 以下是一种逐字打印字符串背面的方法:

 #include <iterator>
 ...
 typedef std::reverse_iterator<std::string::iterator> rev_iter;

 string str("This is a freaking test!");
 for(rev_iter it (str.end()); it != rev_iter(str.begin()); ++it)
     std::cout <<  *it;
 std::cout << endl;
#包括
...
类型定义标准::反向迭代器版本;
string str(“这是一个奇怪的测试!”);
for(rev_iter it(str.end());it!=rev_iter(str.begin());+it)

std::cout字符串文本(和一般字符串)以0结尾。字符串文本(和一般字符串)小东西:字符串数组不是字符串classI我同意变量名,但因为这是一个测试,所以我没有注意名称。不管怎样,当我使用strlen时,数组会继续使用-value,你知道为什么吗?我不太明白你在那里说的,@Madz-你的意思是
I
接受负值?也许可以编辑你r提问并显示一些输出,演示您所看到的内容,以及要复制的代码。@cramer最初我确实犯了一个错误,因为我没有注意到OP没有使用类。现在我唯一一次引用string类是在我实际谈论string类的时候。@paddy my bad,我没有注意到I>=0。我想知道的是什么id用于(int i=strlen(string)-1;string[i];i--)小事情:字符串数组不是字符串classI我同意变量名,但因为这是一个测试,所以我没有注意到名称。不管怎样,当我使用strlen时,数组是针对-值的,你知道为什么吗?我不太明白你在那里说了什么,@Madz-你是说,
i
的值为负值?也许可以编辑你的问题,并显示一些显示你所看到的内容的输出,以及要复制的代码。@cramer最初我犯了一个错误,当时我没有注意到OP没有使用类。现在我唯一引用string类的时候是我实际上没有使用的时候谈论字符串类。@paddy my bad,我没有注意到I>=0。我所做的是使用'for(int I=strlen(string)-1;string[I];I--'),当我继续寻找负整数值时,它在结尾打印了很多胡言乱语。