Когда я пытаюсь преобразовать 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);
}
ss - строковый поток, num1 - это int, а c - символ.
в основном вход представляет собой выражение типа "1 + 1", num1 содержит первый int, который он находит в этом выражении (используя ss >> num1)
я не понимаю, что эта часть
string operand1 = "" + num1; // assume input is "1 + 1" so num1 contains the value 1
...
cout << num1 << endl << operand1 << endl;
выходы
1
exit
Я понятия не имею, откуда происходит "выход", слово изменяется в зависимости от ввода, "exit" становится "it", когда я вводил "3 + 1" и "ye", когда я вводил "13 + 2".
Я предлагаю вам использовать функцию strtoul std. Здесь вы можете найти хорошую документацию.
Примером может служить:
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();
}
Затем, чтобы преобразовать int i
в string i_str
, просто выполните:
i_str = strfrom<int>(i)