所以对某些人来说这可能是一个非常明显的问题,但我不知道从哪里开始这个错误。
我有一些代码从.txt文件读取一些字符串,所有字符串都有一个":"然后经过一个数字。例如:
每种颜色的对象:1
机器人数量:10
预定义位置:1
当我手动编辑值时,stoi工作正常,但是当ac#代码将值写入同一个文件时(注意我已经手动检查,并且有相同的,没有多余的空格,没有多余的字符,没有什么视觉上的不同)stoi抱怨。我的代码是下一个:
C ++:
cout << "Number..." << endl;
cout << dataLine.substr(dataLine.find_first_of(":")+1) << endl;
try{
cfgVals.push_back(stoi(dataLine.substr(dataLine.find_first_of(":")+1)));
}catch(exception& ex){
cout << ex.what() << endl;
}
在这两种情况下,数据线的cout发送一个空格,然后是数字&#34; 1&#34;或&#34; 10&#34 ;.当我编辑文件时,stoi不会抛出异常,但是由其他程序编辑,它确实(但是它似乎无论如何都要进行转换)。
我用来在c#中编写文件的命令非常简单:
File.WriteAllLines(@nameFile, param);
其中param是字符串列表。
希望我很清楚,任何想法?提前谢谢!
答案 0 :(得分:1)
如果您发现C ++程序的行为取决于创建输入文件的程序,则应检查该C#程序使用的编码以及用于从文本处理器保存文件的编码。您也可以在此处发送创建此文件的C#程序代码。
答案 1 :(得分:0)
是的,如果stoi没有得到可以转换成整数的输入,它将抛出异常 - 空格字符不是数字,也不能是数字的一部分。您可以通过删除前面的空间然后将其输送到stoi来修剪输入,这应该可以解决您的问题。
string trim(string num)
{
string res = "";
if (num[0] == ' ') {
res = num.substr(1);
}
return res;
}
这应该可以胜任,假设前面是唯一有空格字符的地方