我在书中发现了这个问题,它要求我们将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;
}
答案 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'