在C ++中从文件读取时增加了空间

时间:2018-07-02 07:05:24

标签: c++

当我使用C ++中的getline方法读取字符串时,会在字符串前面添加一个空格。

我应该怎么做才能消除这种情况?

这是我的代码:

void read_from_file(_Longlong mobile_number) {
  string number = to_string(mobile_number);
  fstream read(number + "messages_not_seen.txt", ios::in);
  _Longlong mobile_numer;
  string first_name;
  string last_name;
  char txt[500];
  int Priority;
  while (read) {
    read >> first_name >> last_name >> mobile_numer;
    read.getline(txt, 500);
    if (read.eof()) {
      break;
    }
    push(mobile_numer, first_name, last_name, txt);
  }
}

2 个答案:

答案 0 :(得分:0)

如果您使用的是现代C ++(C ++-11及更高版本),则可以使用lambda来这样做。

#include <algorithm> 
#include <cctype>
#include <locale>
#include <iostream>
using namespace std; // not recommended, but I assume you're a beginner.

// trim from start (in place)
static inline void ltrim(std::string &s) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) {
        return !std::isspace(ch);
    }));
}
void read_from_file(_Longlong mobile_number)
{
    string number = to_string(mobile_number);
    fstream read(number + "messages_not_seen.txt", ios::in);
    _Longlong mobile_numer;
    string first_name;
    string last_name;
    // char txt[500]; // why are you using C-style char here?
    string txt; // use string instead

    int Priority;
    while (read)
    {
        read >> first_name >> last_name >> mobile_number;
        ltrim(read.get(cin, txt));
        if (read.eof())
        {
            break;
        }
        push(mobile_numer, first_name, last_name, txt);
    }
}

不要忘记在其中调用所有这些功能的main函数。

答案 1 :(得分:0)

>>运算符在流中留下定界空格。通常,这不是问题,因为>>运算符也会忽略前导空格,但是如果在提取后使用getline(),则该空格将包含在字符串中。

您可以使用类似

的符号来忽略前导空格
while (std::isspace(static_cast<unsigned char>(std::cin.peek()))) std::cin.ignore();

或者,如果确定确实有一个前导空格,只需致电cin.ignore()

您可能会发现有用的是非成员std::getline()函数,该函数可与std::string而不是字符数组一起使用。