我有一个文本文件,其中包含状态名称及其各自的缩写。看起来像这样:
Florida FL
Nevada NV
New York NY
因此,州名和缩写之间的空格数不同。我想提取名称和缩写,我考虑过使用带空白的getline作为定界符,但在“纽约”这样的名称中存在空白问题。我可以改用什么功能?
答案 0 :(得分:1)
答案 1 :(得分: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;
}