2017-03-19 164 views
0

因此,例如,我有一個帶有propper C++代碼的.txt文件。我想統計已經使用了多少個比較運算符(例如!=,< =)。我想通過閱讀字符char(請參閱下面的代碼)如何做到這一點,但我無法弄清楚如何在逐行閱讀時做到這一點。也許有人可以給我一個提示?逐行讀取文本文件並計數比較運算符

#include <fstream> 
#include <iostream> 
using namespace std; 

int main(){ 

fstream fin ("file.txt", ios::in); 
bool flag=false; 
char a; 
int count=0; 
fin.get(a); 

while(fin) 
{ 
    if(!flag) 
    { 
     if(a=='=' || a=='!' || a=='<' || a=='>') 
     { 
      flag=true; 
     } 
    } 
    else 
    { 

     if(a=='=') 
     { 
      count++; 
      flag=false; 
     } 
     else flag=false; 
    } 
    fin.get(a); 
} 
fin.close(); 
cout<<"The number of comparison operators in this file: "<<count<<endl; 

return 0; 
} 

回答

1

你的一些運營商都沒有字符,如==和< =兩個字符,所以你必須將它們的比較結果爲一個字符串,你能告訴我更多關於你的文件結構?也許我可以給你一個更好的解決方案。

這裏是一個解決方案,你可以通過在線解決方案

#include<iostream> 
#include<fstream> 
#include<string> 
using namespace std; 
void main() 
{ 
    fstream fin("file.txt", ios::in); 
    string s = ""; 
    int count = 0; 
    while (fin) 
    { 
     getline(fin, s); 
     for (int i = 0; i < s.length()-1; i++) 
     { 
      if (s[i]== '<' || s[i] == '>') 
      { 
       if (s[i + 1] != '>' && s[i + 1] != '<' && s[i - 1] != '>' && s[i - 1] != '<') 
       { 
        count++; 
       } 
      } 
      else if (s[i] == '!' || s[i] == '=') 
      { 
       if (s[i + 1] == '=') 
       { 
        count++; 
       } 
      } 
     } 
    } 
    fin.close(); 
    cout << "The number of comparison operators in this file: " << count << endl; 
    cout << endl << endl; 
    system("pause"); 
} 
+0

所以例如我有這樣txt文件: 'INT主() { INT一個; cin >> a;如果(a == 10) cout <<「賓果!」; if(a <=9 && a> = 4) cout <<「很好,但仍需要一些練習! if(a <=3 && a > = 1) cout <<「下次更好運!」; 如果(a <=0 || a> 10) cout <<「無效輸入」; return 0; }' 輸出結果是:6(僅計數<=,==和<=) – Jan4ezz

+0

是的,但它也從文件('cin.get')中讀取char by char。我在想,如何逐行閱讀(使用'getline(fin,s)',其中s是一個被讀取的字符串)。所以我會從文本中讀取一行,但我不知道如何比較該行中的每個單詞來計算這些操作符? – Jan4ezz

+0

由於某種原因,它不能編譯。首先它說main()必須返回int值(所以它應該是'int main()'),但是當我改變它並嘗試運行這個程序時它會崩潰。 ''program.exe停止工作「但我不明白爲什麼 – Jan4ezz

0

有讀數線之間的線或燒焦成炭沒有大的區別嘗試

void main() 
{ 
fstream fin("file.txt", ios::in); 
bool flag = false; 
char a; 
char b; 
int count = 0; 
fin.get(a); 

while (fin) 
{ 
    if (!flag) 
    { 
     if (a == '<' || a == '>') 
     { 
      fin.get(b); 
      if (b!='>' && b!='<') 
      count++; 
     } 
     else if (a == '!' || a == '=') 
     { 
      fin.get(b); 
      if (b == '=') 
       count++; 
     } 
    } 
    fin.get(a); 
} 
fin.close(); 
cout << "The number of comparison operators in this file: " << count << endl; 

行,你只需要兩個循環,一個用於讀取行,另一個用於處理該char char by char幾乎完全相同的方式處理整個文件。

+0

或者也許人們可以getline()整行,然後相應地劃分它嗎?而你的答案是不解決實際問題如果你只是想告訴他**這不是一個很大的區別**那麼你應該評論它。 – Weaboo