当我使用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);
}
}
答案 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
而不是字符数组一起使用。