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--'),当我继续寻找负整数值时,它在结尾打印了很多胡言乱语。