【问题标题】:converting string vectors to int将字符串向量转换为 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());

【问题讨论】:

  • 其次,为什么if 和索引?为什么不直接读取四个值呢?如while (read >> first_name >> last_name >> absence >> unatoned) { ... }?然后变量可以是正确的类型,您不需要进行任何转换。请了解结构
  • 代替旧的atoi,尝试使用stoi(在cplusplus.com/reference/string/stoi 中描述),如果仍然不起作用,捕获它可以抛出的异常(参见链接)和看看是哪一个。也有一些测试用例给我们,那是你输入的内容并打印absences[0] 的内容,然后你在这里发布。由于在某些评论中您说您已经检查过它,因此它可能包含一些控制字符,这使atoi 感到困惑。 (顺便说一句,OOP 方法是使用class Studentvector<Student>class Students。)

标签: c++ string vector atoi


【解决方案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 &gt;&gt; var 指令将负责转换。

当然,&gt;&gt; 运算符在无效时不会写入整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多