gpt4 book ai didi

c++ - 为什么在第一次读取文件时字符串的长度会减少一个?

转载 作者:太空狗 更新时间:2023-10-29 23:43:28 25 4
gpt4 key购买 nike

我对程序的执行方式感到困惑。我正在循环执行以下过程:

1) 从输入文件中获取类(class)名称

2)输出类(class)名称的长度

问题是第一个值总是比字符串的实际值小一个。

我的第一个字符串包含 13 个字符(包括冒号),但 nameOfClass.length() 返回 12。下一个字符串的字符数是 16,实际上,nameOfClass.length( ) 返回 16。

之后的每个值也返回期望值,只有第一个返回期望值减 1。

这是(简化的)代码:

std::ifstream inf("courseNames.txt");
int numberOfClasses = 10;
string nameOfClass;

for (int i = 0; i < numberOfClasses; i++) {
std::getline(inf, nameOfClass,':');
std::cout << nameOfClass.length() << "\n";
}

文件如下所示 (courseNames.txt):

Pre-Calculus:
Public-Speaking:
English I:
Calculus I:

...etc. (6 more classes)

这是我得到的:

12

16

10

11

谁能解释 .length() 函数的这种行为?

最佳答案

你有问题,但是你的结论是错误的。 std::getline 读取但不输出分隔符,因此第一个结果确实是 12。

它也不输出任何后续行的分隔符,那么为什么总是多一个呢?好吧,看看 : 之后是什么。没错,换行!

Pre-Calculus:
^ a new line

所以你的 nameOfClass 变量,除了第一个字符串,总是在其他字符之前存储一个额外的换行符。

修复很简单,读取字符串后忽略换行即可。

inf.ignore(); // ignore one character

所以,不是第一个结果是错误的,这是唯一正确的:)

关于c++ - 为什么在第一次读取文件时字符串的长度会减少一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com