2014-09-24 38 views
0

log.txt的函數getline閱讀的文本C中的大寫字母++

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 

對不起,我做出了很長的問題,因爲我希望人們誰閱讀和瀏覽更加容易理解。感謝您提前給你的答案

回答

0

您可以處理讀取文本或使用一個分裂的東西正則表達式類似以下內容:使用

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

這裏使用升壓,但我覺得你可以去的std ::正則表達式(GCC 4.9)

+0

感謝提供答案。 – J4X 2014-09-24 04:52:39

+0

Down選民,我也在這裏學習,所以請放下你的自我和思想提供一個有效的理由。如果完全不正確,我很樂意糾正它,甚至刪除它。 – P0W 2014-09-28 14:17:31