有关c++for语句转换字符的问题

2018.10.13

#include<iostream>#include<string>int main(){ using namespace std; cout << "Enter a word:" << endl; string word; cin >> word; char temp; int i, j; for (j = 0,i= word.size()-1; j < i; --i, ++j); {  temp = word[j];  word[j] = word[i];  word[i] = temp; } cout << word << endl << "Done" << endl; return 0;

}

只能转换2个字符 多余三个的就不行

https://m.teaku.com/20/1539441280210138.html

最佳回答

你的

for (j = 0,i= word.size()-1; j < i; --i, ++j);

后面多了分号了,循环直接结束了,下面的程序当然只执行一次

将分号去掉就可以了

其他回答

  • string ss = "ab2c3d7R4E";string number = "1234567890";//string::npos的类型是无符号整型,值为unsigned int类型的最大值,对应于int的-1int pos = 0;while ((pos = ss.find_first_of(number, pos)) != string::npos)//pos = ss.find_first_of(number, pos)在每轮while循环体执行前都会重新执行,即pos的值会不断更新//当ss被查找结束时会返回-1,-1和string::npos比较会发生-1强转成unsigned int类型,这样二者就相等了{cout << " pos = " << pos; pos++;}cout << endl;pos = 0;//for (pos = ss.find_first_of(number, pos); pos != string::npos; pos++)////pos = ss.find_first_of(number, pos)作为for的第一个部分,只是初始化时执行一次,即pos只更新一次,因此异常//{//cout << " pos = " << pos;//}//cout << endl;for (; pos != string::npos; pos++){pos = ss.find_first_of(number, pos);//这里存在一个BUG,尽管查找结束时返回-1,但是紧接着的操作并不是直接与string::npos作比较,而是进行 pos++,因此-1会被修改,永远无法和string::npos作比较,从而死循环cout << " pos = " << pos;}一种方案是:pos = 0;for (; ; pos++){pos = ss.find_first_of(number, pos);if (pos == string::npos) { break; }cout << " pos = " << pos;}

  • 你的答案也是对的但是,就是你最后给值的时候没有把字符串2的'\0'拷贝过去,所以会出现乱码。而2是对的原因是2把所有的字符都拷贝过去了,包括'\0',*s1=*s2是赋值语句,逻辑判定为1,所以为真啊,也可以当作条件语句啊。

  • 注意我添加了注释。string ss = "ab2c3d7R4E";string number = "1234567890";//string::npos的类型是无符号整型,值为unsigned int类型的最大值,对应于int的-1int pos = 0;while ((pos = ss.find_first_of(number, pos)) != string::npos)//pos = ss.find_first_of(number, pos)在每轮while循环体执行前都会重新执行,即pos的值会不断更新//当ss被查找结束时会返回-1,-1和string::npos比较会发生-1强转成unsigned int类型,这样二者就相等了{cout << " pos = " << pos; pos++;}cout << endl;pos = 0;//for (pos = ss.find_first_of(number, pos); pos != string::npos; pos++)////pos = ss.find_first_of(number, pos)作为for的第一个部分,只是初始化时执行一次,即pos只更新一次,因此异常//{//cout << " pos = " << pos;//}//cout << endl;for (; pos != string::npos; pos++){pos = ss.find_first_of(number, pos);//这里存在一个BUG,尽管查找结束时返回-1,但是紧接着的操作并不是直接与string::npos作比较,而是进行 pos++,因此-1会被修改,永远无法和string::npos作比较,从而死循环cout << " pos = " << pos;}一种方案是:pos = 0;for (; ; pos++){pos = ss.find_first_of(number, pos);if (pos == string::npos) { break; }cout << " pos = " << pos;}

相关搜索