[英]String reversal in C++ not replacing old string with new string
我正在制作一个简单的回文检测器,通过将一个int转换为一个字符串,反转字符串并使字符串返回一个int来比较它(也可以比较字符串,而不是问题)但是由于某种原因,反向字符串保留了前一个字符串值并将新的值添加到行而不是替换它们......为什么会这样?
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string tempreverse;
string temp;
stringstream out;
int tempnumber, tempnumber2;
int palindrome = 0;
for(int i = 100; i < 111; i++){
for(int j = 100; j < 111; j++){
tempnumber = i * j;
out << tempnumber;
temp = out.str();
tempreverse = string (temp.rbegin(), temp.rend());
tempnumber2 = atoi(tempreverse.c_str());
if (tempnumber == tempnumber2){
palindrome = tempnumber;
}
}
}
cout << palindrome << "\n";
cout << "Press ENTER to continue...";
cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
return 0;
}
您需要每次清除字符串流。 你不断添加东西并使字符串更大。
我会在循环中声明它,以便它每次都超出范围。 我已经阅读了过去清除字符串流的问题。
这是因为你声明你的变量out
嵌套以外的for循环。 这意味着每次迭代都使用相同的out
变量,并通过循环每次都附加。
要简单地修复此问题,您可以将stringsteam out
行移动到inner for循环内部。
通常,您应该在第一次使用它们时声明变量,以便将它们保存在最小的包含范围内,除非您有特殊原因不这样做。 这也可以防止意外使用未初始化的值。 例如,您可以将行temp = out.str()
更改为string temp = out.str()
并删除string temp;
从一开始就行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.