C++ 手动将整型变量放入字符串中

C++ 手动将整型变量放入字符串中,c++,string,integer,C++,String,Integer,我有一个关于以下代码的快速问题 int main() { string data; int x; cin >> x; if (x < 0) { data = to_string(x); } else { data = to_string(x); } return 0; } intmain() { 字符串数据; int x; cin>>x; if(x>x; 字符串s=

我有一个关于以下代码的快速问题

int main()
{
    string data;
    int x;
    cin >> x;

    if (x < 0)
    {
        data = to_string(x);
    }
    else
    {
        data = to_string(x);
    }
   return 0;
}
intmain()
{
字符串数据;
int x;
cin>>x;
if(x<0)
{
数据=到字符串(x);
}
其他的
{
数据=到字符串(x);
}
返回0;
}
如果我不想使用
来_string(x)
,我想手动执行一些操作。还有什么我能做到的吗?如果我使用
data=x这显然行不通


另外,我也不想使用atoi,

您可以执行以下操作:

int main(){
    int x;
    cin>>x;
    string s = "";     // s will represent x but with the digits reversed
    bool neg = 0;      // this flag is 1 if x is negative and 0 if positive. 
                       // we will use it to find out if we should put a "-" before the number
    if(x < 0){
        neg = 1;
        x *= -1;       // making the number positive
    }
    while(x){
        char c = '0' + x % 10;          // c represent the least significant digit of x
        s.push_back(c);                 // adding c to s             
        x /= 10;                        // removing the least significant digit of x
    }
    string ans = "";                    // ans is our resulting string
    if(neg) ans.push_back('-');         // adding a negative sign if x was negative
    for(int i=s.size() - 1; i >= 0; i--)    // adding the characters of s in reverse order
        ans.push_back(s[i]);
}
intmain(){
int x;
cin>>x;
字符串s=”“;//s将表示x,但数字颠倒
bool neg=0;//如果x为负,则此标志为1;如果x为正,则此标志为0。
//我们将用它来确定我们是否应该在数字前加一个“-”
if(x<0){
负=1;
x*=-1;//使数字为正
}
while(x){
字符c='0'+x%10;//c表示x的最低有效位
s、 向后推(c);//将c添加到s
x/=10;//删除x的最低有效位
}
字符串ans=“”;//ans是我们的结果字符串
if(neg)ans.push_back('-');//如果x为负数,则添加负号
for(int i=s.size()-1;i>=0;i--)//按相反顺序添加s的字符
推回(s[i]);
}

这可能就足够了

string convertInt(int number)
{
    if (number == 0)
        return "0";
    string temp="";
    string returnvalue="";
    while (number>0)
    {
        temp+=number%10+'0';
        number/=10;
    }
    for (int i=0;i<temp.length();i++)
        returnvalue+=temp[temp.length()-i-1];
    return returnvalue;
}
string convertInt(整数编号)
{
如果(数字==0)
返回“0”;
字符串temp=“”;
字符串returnvalue=“”;
而(数量>0)
{
温度+=数字%10+'0';
数目/=10;
}

对于(int i=0;i而言,在任意基数中手动格式化整数并不困难。例如,在基数10中:

void print(int n)
{
    if (n == 0) { std::cout << '0'; return; }
    if (n < 0) { std::cout << '-'; n = -n; }

    std::string buf;
    while (n != 0) { buf += '0' + n % 10; n /= 10; }
    for (auto it = buf.rbegin(); it != buf.rend(); ++it)
        std::cout << *it;
}
void打印(int n)
{

如果(n==0){std::cout

std::string manual_convert(int value)
{
    if (x < 0)
       return std::string("-") + manual_convert(-x);   // handle negative values (except potentially INT_MIN)
    else if (x == 0)
       return "0";

    std::string retval;
    while (x > 0)
    {
         char digit = x%10 + '0';     // extract the proverbial digit
         retval.append(1, digit);
         x /= 10;                     // drop the digit, and prepare for next one
    }

    std::reverse(retval.begin(), retval.end());   // loop above extracted digits in reverse order
    return retval;
}
std::字符串手动转换(int值)
{
if(x<0)
return std::string(“-”)+manual_convert(-x);//处理负值(除了可能的INT_MIN)
else如果(x==0)
返回“0”;
std::字符串检索;
而(x>0)
{
char digit=x%10+'0';//提取常用数字
retval.append(1位);
x/=10;//放下数字,准备下一个数字
}
std::reverse(retval.begin(),retval.end());//按相反顺序循环提取的数字
返回返回;
}
两种简单的方法:

#include <sstream>
string intToString(int x)
{
   stringstream stream;
   stream << x;
   return stream.str();
}
#包括
字符串intToString(intx)
{
溪流;

如果
std::to_string
不符合“手动”的条件,我看不出这会有什么影响。对不起,我没有注意。我将修改我的代码。将数字按相反顺序放置的原因是什么?x%10将返回一个介于0和9之间的整数。但我们需要一个字符来表示整数。在ASCII表中()我们有从0开始的数字序列(0、1、2、3、4、5、6、7、8、9)。因此,如果我们在ASCII值“0”中添加一个介于0和9之间的整数x,我们将得到一个ASCII值代表整数x的字符。x%10返回x的最低有效位。因此123%10将返回3。我们将3保存在s[0],但在最后一个字符串中,3应该在最后一个索引中。不确定为什么要进行下一次投票。这是按照OP的要求进行的,没有真正调用另一个函数来完成此任务。我没有进行下一次投票,但可以看到原因。代码假定一个特定的字符集(ASCII)而且不会与其他字符集一起工作。也有一些不那么神秘的方法来完成这项工作。与其在使用一个除非知道“0”在ASCII中是48否则很难理解的数字时发出警告,不如直接使用
'0'
'0'
'9'
,这肯定是错误的ecutive在字符集中,
'0'
更好地表达了意思,现在代码可以移植(并不是说依赖ASCII真的会对99%的代码产生影响)。其他数字可能不仅仅是接下来的9个字符,而且可能仍然会失败。@Steve,对不起,编辑了我的评论,但它们确实是。即使它们不是,你也可以在同样的假设下获得更高的可读性,并且不再有“0”是48个假设。
string str = lexical_cast<string>(x)