整数到字符串:不使用stoi库

时间:2015-03-20 03:22:20

标签: c++

我在书中发现了这个问题,它要求我们将Int转换为字符串。不使用stoi库 例如,如果x = 10,则s =" 10" 代码应该处理负数。

我在书中找到了这个解决方案。我在我的编译器中输入了它,但它只给出了第一个数字的字符串

所以,如果x = 45,则表示" 4"

我不明白这行s = '0' + x%10;能够修复代码。 为什么他要加上' 0'到字符串。什么是最好的解决方案。

这是代码:我在我理解的部分添加了注释

#include<iostream>
#include<string>
using namespace std;


void IntToString(int x);
int main()
{
    int num;
    cout << "Please enter a number" << endl;
    cin >> num;

    IntToString(num);
}

void IntToString(int x)
{
    bool isNegative = false;
    if(x < 0)         //if its negative make boolean true 
    {
        x = -x;
        isNegative = true;
    }
    string s;
    do
    {
        s = '0' + x%10;    //modulus for getting the last number
        x = x/10;   //shorten the number
    }while(x); 
    reverse(s.begin(), s.end()); //reverse the string since it starts from end

    if(isNegative)
        s = '-' + s;
    cout << s << endl;
}

2 个答案:

答案 0 :(得分:3)

s = '0' + x%10;

将从x%10抓取最后一位数字并添加0的ASCII,即48,给出所需最后一位数的ASCII,使用其赋值运算符将副本分配给字符串s

顺便说一下,你需要:

s += '0' + x%10;
  ~~ // += operator 

答案 1 :(得分:1)

do ... while循环的问题在于,您只是提取已更改的x的最后一位,只是将其替换为倒数第二位,依此类推,直到获得{的第一位数字为止{1}}存储在x

s没有效果,因为reverse(s.begin(), s.end())实际上只包含一个字符。

另外,我们将s添加到'0',因为s最初存储数字的整数值,并添加s将其转换为ASCII格式。

示例:

'0'