C ++中的字符串反转不是用新字符串替换旧字符串

时间:2012-09-13 03:19:30

标签: c++

我正在制作一个简单的回文检测器,将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;
}

2 个答案:

答案 0 :(得分:5)

每次都需要清除字符串流。你不断添加东西并使字符串更大。

我会在循环中声明它,以便每次都超出范围。我已经阅读了过去清除字符串流的问题。

答案 1 :(得分:3)

这是因为您在嵌套for循环之外声明变量out。这意味着每次迭代都使用相同的out变量,并通过循环每次都附加。

要简单地修复此问题,您可以将stringsteam out行移动到内部for循环内部。

一般情况下,除非有特殊原因,否则在第一次使用它们时,应该声明变量,使它们保持在最小的包含范围内。这也可以防止意外使用未初始化的值。例如,您可以将行temp = out.str()更改为string temp = out.str(),并从头开始删除string temp;行。