【问题标题】:Storing multiple integers in a string [closed]在字符串中存储多个整数[关闭]
【发布时间】:2017-12-08 02:50:32
【问题描述】:

我正在尝试将 5 个整数存储到一个字符串中,但我遇到了麻烦。代码如下:

for (int a = 0; a < 5; a++)
        {
            string ans;
            int number;
            int num;
            number = rand() % 9 + 1;
            cout << number << " ";
            num = number;
            to_string(num);
            ans =+ num;
        }

基本上,我希望“ans”类似于“12345”,但是当我运行它时,它要么不显示任何内容,要么显示 5 个带有问号的框。有什么帮助吗?

【问题讨论】:

  • 你很接近,但你想要ans += to_string(num);
  • 请显示真实代码,而不是这个不可能显示任何实质性内容的明显假代码,因为这里没有一行代码可以显示您声称的 ans 的值正在看。此外,ans 的值在循环的每次迭代中都会被销毁。对虚假代码的唯一回应就是虚假答案。
  • 很多问题首先to_string(num)不做任何事情它应该是ans+=to_string(num)也应该ans应该在if语句之前。
  • @SamVarshavchik 显然我有一个显示语句显示 ans,我只是觉得它并不重要。
  • @JakeFreeman 如果声明会怎样?

标签: c++ visual-studio visual-c++


【解决方案1】:

你可以这样做:

string ans;
int number;

for (int a = 0; a < 5; a++){ 
    number = rand() % 9 + 1;
    ans += to_string(number);
}
cout << ans;

【讨论】:

  • 实际上,对我有用的是 ans = ans + to_string(num)!谢谢!
  • ans += to_string(num) 优于 ans = ans + to_string(num)
【解决方案2】:

to_string() 返回一个字符串。 您可以简单地尝试这样做: ans += to_string(num);

或者,编写代码以提高可读性的更好方法是使用临时字符串变量而不是 int num 来存储数字。

    string temp;
    string ans;
    for (int a = 0; a < 5; a++)
    {
        //string ans;
        int number;
        //int num;
        number = rand() % 9 + 1;
        cout << number << " ";
        //num = number;
        temp = to_string(number);
        ans += temp;
    }

您不想在 for 循环中声明您的 string ans,因为每次循环运行时,您的 ans 将不再保留之前的值,因为它再次被声明。

【讨论】:

    【解决方案3】:

    您的代码存在许多问题。

    • 您在循环内声明ans,因此在每次循环迭代时都会创建和销毁它。如果您希望循环将 5 个数字附加到 ans,则必须改为在循环之外声明它。

    • std::to_string() 输出一个新的std::string 作为其返回值。它不会像您的代码所假设的那样“神奇地”将输入值转换为字符串类型。您根本没有将返回的字符串附加到ans

    • =+ 不是有效的附加运算符。它被解释为单独的运算符=+std::string 没有将int 作为输入的= 运算符,也没有一元+ 运算符。您需要改用+= 运算符。

    试试这个:

    #include <string>
    #include <iostream>
    
    std::string ans;
    for (int a = 0; a < 5; ++a)
    {
        int number = ...
        ...
        ans += std::to_string(number);
    }
    // use ans as needed...
    

    或者,使用std::ostringstream 代替std::to_string()

    #include <string>
    #include <sstream>
    #include <iostream>
    
    std::ostringstream oss;
    for (int a = 0; a < 5; ++a)
    {
        int number = ...
        ...
        oss << number;
    }
    std::string ans = oss.str();
    // use ans as needed...
    

    话虽如此,您显然使用的是 C++11(当引入 std::to_string() 时)或更高版本,因此您应该使用 C++ 随机数生成器而不是 C 中的随机数生成器,例如:

    #include <random>
    
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 9);
    
    for (int a = 0; a < 5; ++a)
    {
        int number = dis(gen);
        ...
    }
    

    【讨论】:

    • =+ 有效但被解析为 2 个独立的运算符
    猜你喜欢
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2021-08-06
    • 2022-01-02
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多