2012-05-23 61 views
0

即時通訊嘗試對C++中的文本文件中的字符進行計數,這是迄今爲止我出於某種原因即時獲取4的字符。即使您有123456個字符。如果我增加或減少字符,我仍然得到4,請幫助,並提前感謝如何計算文本文件中的字符

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

const char FileName[] = "text.txt"; 

int main() 
{ 
string line; 
ifstream inMyStream (FileName); 
int c; 

if (inMyStream.is_open()) 
{ 

    while( getline (inMyStream, line)){ 

      cout<<line<<endl; 
       c++; 
    } 
    } 
    inMyStream.close(); 

system("pause"); 
    return 0; 
} 
+5

你沒有初始化' C'。此外,你似乎在計算線條,而不是字符。 – chris

+0

你的意思是計數行或字符?我認爲這個代碼是計算行數,但你指的是計數字符。 – SirPentor

+0

我如何計算字符,如果我只有一行,爲什麼會給我4. – user836910

回答

5

你正在數線。
你應該計算字符。將其更改爲:

while(getline (inMyStream, line)) 
{ 
    cout << line << endl; 
    c += line.length(); 
} 
+1

'strlen'應該是'line.length()'。 – chris

+0

謝謝@chris .. – BeemerGuy

+0

啊,我明白了,謝謝。 – user836910

0

只要使用好老的C文件指針:

int fileLen(std::string fileName) 
{ 
    FILE *f = fopen(fileName.c_str(), "rb"); 

    if (f == NULL || ferror(f)) 
    { 
     if (f) 
      fclose(f); 

     return -1; 
    } 

    fseek(f, 0, SEEK_END); 
    int len = fell(f); 

    fclose(f); 

    return len; 
} 
+0

使用「rb」而不是「r」來避免行結束翻譯錯誤 – EvilTeach

+0

這種技術可以通過流來完成,沒有理由在C中從頭開始重寫所有內容。 –

2

可能有數以百計的方法可以做到這一點。 我認爲最有效的是:

inMyStream.seekg(0,std::ios_base::end); 
    std::ios_base::streampos end_pos = inMyStream.tellg(); 

    return end_pos; 
0

首先,你必須初始化一個局部變量,這意味着: int c = 0; 而不是 int c;

我覺得老易理解的方式是使用get()功能,直到結束字符EOF

char current_char; 
    if (inMyStream.is_open()) 
     { 

      while(inMyStream.get(current_char)){ 

       if(current_char == EOF) 
       { 
        break; 
       } 
       c++; 
      } 
     } 

然後c

0

我發現這個簡單的方法的字符個數,希望這有助於

while(1) 
    { 
     if(txtFile.peek() == -1) 
      break; 
     c = txtFile.get(); 
     if(c != txtFile.eof()) 
        noOfChars++; 
    } 
2

這是我應該怎樣解決這個問題:

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 


int main() 
{ 
string line; 
int sum=0; 
ifstream inData ; 
inData.open("countletters.txt"); 

while(!inData.eof()) 
{ 
getline(inData,line); 

    int numofChars= line.length(); 
    for (unsigned int n = 0; n<line.length();n++) 
    { 
    if (line.at(n) == ' ') 
    { 
    numofChars--; 
    } 
    } 
sum=numofChars+sum; 
} 
cout << "Number of characters: "<< sum << endl; 
    return 0 ; 
} 
相關問題