2016-03-28 75 views
-2

我試圖讀取一個隨機文件(在mac-xcode上)並確定文檔中字母k的實例。然後打印該數字作爲輸出文件。我的問題是outfile沒有被寫入,並且nums_k返回爲0.我不確定ifstream是否工作不正確,或者ofstream需要建立不同的文件名。這是我的源代碼。ifstream ofstream on mac

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

int main() { 

    ifstream infile("Users/bryanmichaelnorris/documents/extra credit assignment.docx"); 

    string line; 
    int numks = 0; 

    while (getline(infile,line)) {  
     int x = 0;   
     for (std::string::iterator it=line.begin(); it!=line.end(); ++it) {    
      if (line[x] == 'k') {     
        numks++;    
      }    
      x++;   
     }  
    }   

    infile.close();  
    ofstream outfile("number of k's.docx"); 
    outfile << "There are " << numks << " K's in the file." << endl; 
    outfile.close();   
    return 0; 
} 
+1

'「Users/...」',我會先在該名稱的*開頭*處加上一個'/'開始。如果你想驗證你的輸入文件是否正確打開,它肯定不會損害*測試它,而不是假設世界上所有的東西都是正確的。您可能還想研究輸出文件的寫入位置,因爲在Xcode下運行時的當前工作目錄通常與人們所認爲的完全不同(但可以在模式編輯器中更改它)。 – WhozCraig

+0

@WhozCraig幾乎肯定碰到了頭部 – trojanfoe

+0

不要使用'.docx'擴展名來處理不是MS-Word文檔的文件...如果您確實需要擴展名,也許'.txt'是一個好多了。如果輸入文件也是MS-Word文件,那麼我不會用這種方法計算字母'k',因爲您可能會將'k'用於除文本本身之外的其他內容。 –

回答

0

爲打開的文件添加驗證。

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

int main() 
{ 
    const char * csInputFileNane="Users/bryanmichaelnorris/documents/extra credit assignment.docx"; 
    ifstream infile(csInputFileNane); 
     if (!infile.is_open()) { 
     cerr << "Cannot open file \""<<csInputFileNane<<'"'<<endl; 
     return -1; 
    } 
    string line; 

    int numks = 0; 

    while (getline(infile,line)) 
    { int x = 0; 
     for (std::string::iterator it=line.begin(); it!=line.end(); ++it)    { 
      if (line[x] == 'k') 
      { 
       numks++; 
      } 
      x++; 
     } 
    } 
    infile.close(); 
    const char *csOutFileName="number of k's.docx"; 
    ofstream outfile(csOutFileName); 
    if (!outfile.is_open()) { 
     cerr << "Cannot open file \""<<csOutFileName<<'"'<<endl; 
     return -1; 
    } 
    outfile << "There are " << numks << " K's in the file." << endl; 
    outfile.close(); 
    return 0; 

}