将字符串向量转换为 int
Posted
技术标签:
【中文标题】将字符串向量转换为 int【英文标题】:converting string vectors to int 【发布时间】:2019-03-04 13:34:00 【问题描述】:我必须编写一个程序来从文件中为学生读取信息,并且我制作了几个向量来保存所有这些信息。但是后来我需要总结所有学生的缺勤情况,所以我需要将它们转换为整数,但是当我尝试运行程序时,当它到达 atoi 部分时立即崩溃。
while(!read.eof())
if(i==4)
i=0;
read>>b;
if(i==0) names.push_back(b);
if(i==1) last_name.push_back(b);
if(i==2) absences.push_back(b);
if(i==3) unatoned.push_back(b);
i++;
int a = atoi(absences[0].c_str());
【问题讨论】:
首先请阅读Why is iostream::eof inside a loop condition considered wrong? 其次,为什么if
和索引?为什么不直接读取四个值呢?如while (read >> first_name >> last_name >> absence >> unatoned) ...
?然后变量可以是正确的类型,您不需要进行任何转换。请了解结构和类。
代替旧的atoi
,尝试使用stoi
(在cplusplus.com/reference/string/stoi 中描述),如果仍然不起作用,捕获它可以抛出的异常(参见链接)和看看是哪一个。也有一些测试用例给我们,那是你输入的内容并打印absences[0]
的内容,然后你在这里发布。由于在某些评论中您说您已经检查过它,因此它可能包含一些控制字符,这使atoi
感到困惑。 (顺便说一句,OOP 方法是使用class Student
和vector<Student>
或class Students
。)
【参考方案1】:
如果absences
保持为空,则absences[0]
的行为未定义。
当absences
为空时使用absences.at(0)
会强制编译器抛出异常,因此更易于使用。
无论哪种方式,对于缺勤的数量,请简单地使用
auto a = absences.size();
【讨论】:
我确信缺席不是空的,因为当我尝试 cout 时,它会打印出应该在其中的内容。 那么,当你使用absences.at(0)
时会发生什么?
@Ruzzle 可能absences
选择中有一些空格,这就是为什么不在int
中转换【参考方案2】:
您应该将缺席向量更改为 int 的向量:
std::vector<int> abscences;
// rest of the code...
read >> var
指令将负责转换。
当然,>>
运算符在无效时不会写入整数。
【讨论】:
以上是关于将字符串向量转换为 int的主要内容,如果未能解决你的问题,请参考以下文章