getline读取C++中用大写字母分隔的文本

getline read text seperated before an UPPERCASE LETTER in C++

本文关键字:分隔 文本 大写字母 读取 C++ getline      更新时间:2023-10-16

log.txt

AwBcDoFgAgHmLoCb
AwCcDoAgBgHmCoZb
GwDcFoFgAgNmOoBb

main.cpp

#include <iostream>
#include <fstream>
using namespace std;
main()
{
    string output;
    int counter=0;
    ifstream readLog;
    readLog.open("log.txt");
    while(!readLog.eof())
    {
        getline(readLog,output);  //read string line by line from the log.txt 
        cout<<counter+1<<"*  "<<output<<endl;  
        counter++;
    }
}

输出

1*  AwBcDoFgAgHmLoCb
2*  AwCcDoAgBgHmCoZb
3*  GwDcFoFgAgNmOoBb

我的问题出现在这里,我知道如果字符串之间有分隔符。我们可以使用多个

Aw:Bc:Do:Fg:Ag:Hm:Lo:Cb
getline(readLog,output,':');  //output: Aw
getline(readLog,output,':');  //output: Bc
getline(readLog,output,':');  //output: Do
getline(readLog,output,':');  //output: Fg
getline(readLog,output,':');  //output: Ag
getline(readLog,output,':');  //output: Hm
getline(readLog,output,':');  //output: Lo
getline(readLog,output);      //output: Cb

但是现在没有TEXT之间的分隔符。我想在大写字母之前阅读输出

Example: AwBc
I just want to read in Aw and Bc Seperately, how can I make it works?
Is there any code can be written like
getline(readLog,output,'<UPPERCASE LETTER FUNCTION>');

输出(*预期)

Aw
Bc

很抱歉我问了这么长的问题,因为我希望阅读和观看的人更容易理解。提前感谢您对的回答

您可以处理读取的文本,也可以使用正则表达式来拆分如下内容:

const std::string s = "AwBcDoFgAgHmLoCb";
boost::regex words_regex("[A-Z][a-z]");
auto words_begin = 
    boost::sregex_iterator(s.begin(), s.end(), words_regex);
auto words_end = boost::sregex_iterator();

循环组使用:

for (boost::sregex_iterator i = words_begin; i != words_end; ++i) {
    boost::smatch match = *i;                                                 
    std::string match_str = match.str(); 
    std::cout << match_str << 'n';
}

Demo Here

此处使用Boost,但我认为您可以使用std::regex(GCC 4.9)