我的文本文件看起来像这样:
Florida FL
Nevada NV
New York NY
现在,当我使用getline读取文件并将其打印到控制台时,每行的末尾都有一个换行符(除了最后一行)。 Getline应该摆脱换行符。从哪里来?
ifstream inFileAbb("abbreviation.txt", ios::in);
while(getline(inFileAbb, line)){
cout << line;
}
答案 0 :(得分:0)
系统的方法是分析所有可能的输入数据,然后在文本中搜索模式。在您的情况下,我们会分析问题并找出原因
因此,如果我们搜索状态缩写模式并将其拆分,则状态的全名将可用。但也许有前后空格。我们将删除它,然后结果在那里。
对于搜索,我们将使用std::regex
。模式是:1个或多个大写字母,后跟0个或多个空格,然后是行尾。正则表达式为:"([A-Z]+)\\s*$"
我们不在乎换行符或其他内容。我们搜索所需的文本。
如果可用,结果的前缀将包含完整的状态名称。我们将删除开头和结尾的空格。
请参阅:
#include <iostream>
#include <string>
#include <sstream>
#include <regex>
std::istringstream textFile(R"( Florida FL
Nevada NV
New York NY)");
std::regex regexStateAbbreviation("([A-Z]+)\\s*$");
int main()
{
// Split of some parts
std::smatch stateAbbreviationMatch{};
std::string line{};
while (std::getline(textFile, line)) {
if (std::regex_search(line, stateAbbreviationMatch, regexStateAbbreviation))
{
// Get the state
std::string state(stateAbbreviationMatch.prefix());
// Remove leading and trailing spaces
state = std::regex_replace(state, std::regex("^ +| +$|( ) +"), "$1");
// Get the state abbreviation
std::string stateabbreviation(stateAbbreviationMatch[0]);
// Print Result
std::cout << stateabbreviation << ' ' << state << '\n';
}
}
return 0;
}