【问题标题】:Why this string is not converting to Integer?为什么这个字符串没有转换为整数?
【发布时间】:2022-01-21 12:49:32
【问题描述】:

我正在尝试将字符串 r 转换为 int(num)。但它一直返回 0。注意:当我返回字符串时,答案(反转的数字)是正确的。我的代码如下所示:


string n, r = "";
        cin >> n;

        for (int i = n.length(); i >= 0; i--)
        {
            r += n[i];
        }

        int num;

        istringstream(r) >> num;

        cout << num << endl;

【问题讨论】:

  • 尝试使用 std::stoi 将字符串转换为整数。如果输入不正确,它会抛出一个异常,告诉你出了什么问题:en.cppreference.com/w/cpp/string/basic_string/stol
  • 我这样做了,我什至没有返回值。
  • 试试std::reverse,你不应该从n.length()开始,而是从n.length()-1开始

标签: c++ string for-loop char reverse


【解决方案1】:

字符n[n.length()]的值等于'\0'

也就是当下标操作符的索引等于字符串的大小那么它"返回一个类型的对象的引用 charT 的值为 charT(),其中修改对象会导致未定义的行为。”(C++ 标准)

所以你的反转字符串以终止零开头。

用以下方式重写你的 for 循环

    for ( auto i = n.length(); i != 0;  )
    {
        r += n[--i];
    }

    for ( auto i = n.length(); i != 0; --i )
    {
        r += n[i - 1];
    }

当然,你可以写而不是 for 循环

r.assign( n.rbegin(), n.rend() );

注意变量r初始化为空字符串

string n, r = "";

是多余的。你可以写

string n, r;

【讨论】:

  • 是的,它有效!
  • 顺便说一句,The value of the character n[n.length()] is equal to '\0' 你能澄清一下吗?我不明白:(
  • @AhnaafAlRafee 从 C++ 11 开始符合 C++ 标准。从下标运算符“Returns: *(begin() + pos) if pos
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 2022-11-13
  • 2023-03-19
  • 2013-11-02
  • 2019-12-28
  • 2012-12-07
  • 1970-01-01
  • 2017-04-09
相关资源
最近更新 更多