Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将int转换为字符串时出错_C++_String_Output - Fatal编程技术网

C++ C++;将int转换为字符串时出错

C++ C++;将int转换为字符串时出错,c++,string,output,C++,String,Output,当我尝试将int转换为字符串时,它会产生奇怪的结果,我不知道它来自何处,下面是一个代码片段: if (!ss.fail() && !ss.eof()) { ss.clear(); string operand1 = "" + num1; string operand2 = ""; getline(ss,operand2); operand2 = trim(operand2); cout << num1 <

当我尝试将int转换为字符串时,它会产生奇怪的结果,我不知道它来自何处,下面是一个代码片段:

if (!ss.fail() && !ss.eof()) {
    ss.clear();

    string operand1 = "" + num1;
    string operand2 = "";
    getline(ss,operand2);   
    operand2 = trim(operand2);

    cout << num1 << endl << operand1 << endl;
    return expression_isvalid(operand1) && expression_isvalid(operand2) && operator_isvalid(c);

}

我不知道“退出”从何而来,这个词根据输入的不同而变化,“退出”在我输入“3+1”时变成“it”,在我输入“13+2”时变成“ye”

我建议您使用std的strtoul功能。您可以找到一个很好的文档

例如:

static unsigned long stringToInt(const string& str) {
  const char* cstr = str.c_str();
  char* endPtr = 0;
  return ::strtoul(cstr, &endPtr, 0);
}

您可以使用
stringstream
转换
string
中的各种类型。我通常使用以下模板来实现这一点:

template <typename T>
static std::string strfrom(T x)
{
    std::ostringstream stream;

    stream << x;

    return stream.str();
}

在标题中写probelm的probelm:)是的。以及缓冲区溢出等问题。(该随机字符串对我来说似乎来自无效内存->UB。)我不确定:是否要将输入int转换为字符串,或创建获取字符串表达式并以字符串形式返回值的计算?
“”+num1
——这不会将整数转换为字符串(事实上,它会导致一个未定义的行为,这就是为什么您会得到奇怪的输出)你必须知道如何正确地将一个整数转换成一个字符串。你有两个粗略的猜测,然后你必须打开一个C++手册并读。<代码> NUM1<代码>是<代码> int >代码>,你将它添加到<代码> const(& char)的逻辑基址(1)。。你意识到这不是将<代码> int >代码的文本翻译附加到字符串中的方法,对吗?你在本质上是在一个conchar缓冲区上做指针数学。或者你可以建议更多类似C++的东西,完全避免Strutl。
static unsigned long stringToInt(const string& str) {
  const char* cstr = str.c_str();
  char* endPtr = 0;
  return ::strtoul(cstr, &endPtr, 0);
}
template <typename T>
static std::string strfrom(T x)
{
    std::ostringstream stream;

    stream << x;

    return stream.str();
}
i_str = strfrom<int>(i)