比较字符串的大小,但最后一个字符串始终是该大小+1

问题描述 投票:0回答:1

我必须使用 getline() 从文本文件中读取,然后打印出从该文件中读取的最大大小的字符串。如果没有最大尺寸,则打印出第一个字符串。

#include <iostream>
#include <string>
using namespace std;

int main()
{
  string largest = "";
  string line = "";
  
  while (getline(cin, line, ' '))
  {
    if (line.size() > largest.size())
    {
      //then reassign largest to the input (string line) 
      largest = line;
    }
  }
  cout << largest << endl;  
}

文本文件输入读取为:某些带有文本的行

这四个单词的大小应为 4,对于“some”、“line”和“with”来说也是如此。然而,“文本”以 5 号的形式返回。我觉得我错过了一些非常简单的东西。

c++ text sizeof getline
1个回答
0
投票

当你这样做时

getline(cin, line, ' ')

getline
会一直读取直到遇到空格,而这种情况不会在输入结束时发生。输入的末尾有一个换行符,因此会被读入
line
,这就是为什么最后一个输入的大小比您预期的大 1 的原因。

要解决此问题,您可以先读入整行,然后将其拆分,或者您可以只使用

operator >>
,例如

while (cin >> line)
{
    if (line.size() > largest.size())
    {
        //then reassign largest to the input (string line) 
        largest = line;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.