[英]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.