2012-10-15 48 views
1

我有一個文本文件,數字範圍從0-255,用逗號分隔。我希望能夠將每個這些數字存儲到一個整數數組中。文本文件可能包含的示例是; 「32,51,45,12,5,2,7,2,9,233,132,175,143,33 ......」等將一串數字解析爲整數數組| | C++

非常缺乏經驗與C++,請與我裸露的編程。到目前爲止我設法做的是讓我的程序將文本文件中的數據作爲字符串存儲並輸出到屏幕上。接下來我需要做的是將該字符串的值存儲在整數數組中,用逗號分隔數字。

這是我寫到目前爲止的代碼,我有問題得到它的工作;

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
     while (myfile.good()) 
     { 
      getline (myfile,line); 
      cout << line << endl; 
     } 
     myfile.close(); 
    } 

    else cout << "Unable to open file"; 

//STRING CONVERSION 
std::string str = line; 
std::vector<int> vect; 

std::stringstream ss(str); 

int i = 0; 

while (ss >> i) 
{ 
    vect.push_back(i); 

    if (ss.peek() == ',') 
     ss.ignore(); 
} 

system("pause"); 
return 0; 

任何意見如何做到這一點非常感謝。

+1

代碼的哪些部分導致問題?換句話說,你的問題是什麼? – pedrofurla

+0

@pedrofurla即使正在定位和讀取文件,我也會收到錯誤,指出「無法找到或打開PDB文件」。但我的主要問題是我是否正確執行了操作的第二部分(STRING CONVERSION)?這是做到這一點的正確方法嗎? – Mangkey

+0

編輯問題,以便它提供適當的信息並實際詢問問題。不要指望ppl只看你的並修復它。 – pedrofurla

回答

-1

它看起來像你的代碼來標記你的字符串是關閉的。特別是你需要確保你調用你的整數字符串atoi()來獲得一個整數。我將專注於解析字符串。

你可以使用的一件事是C的strtok。我建議這主要是因爲你的案例很簡單,這可能是最簡單的方法。

你找的代碼基本是這樣的:

char* numStr = strtok(str.c_str(), ","); 
while (numStr) 
{ 
    vect.push_back(atoi(numStr)); 
    numStr = strtok(NULL, ","); 
} 

的strtok()需要兩個參數:一個指向你的標記化C風格字符串(字符*),以及串分隔符(注意分隔符字符串中的每個字符都被視爲自己的分隔符)。

我應該提到strtok不是線程安全的,而且您還必須確保從文件中提取的字符串以空字符\0結尾。

this question的答案爲我的解決方案提供了很多替代方案。如果您想使用std::stringstream,那麼我建議您查看該頁面上的第5個答案。

關於您在使用PDB時遇到的問題,您得到的確切錯誤是什麼?

+0

你有字符串終止符字符斜槓錯誤,它應該是一個_backs(_ \\')不是正斜槓。 –

+2

此外,不鼓勵使用'atoi'來支持['std :: strtol'](http://en.cppreference.com/w/cpp/string/byte/strtol)或['std :: stoi '](HTTP://en.cppreference。COM/W/CPP /串/ basic_string的/ STOL)。 –

+0

@JoachimPileborg我犯了一個簡單的錯字。我不明白如何保證投票下來。我的答案提供了相關資源和備選方案的解決方案。您的評論記錄了首選電話。 – kevintodisco