回答
有很多方法可以做到這一點,簡單的谷歌搜索給你一個解決方案。
這裏是來自my projects之一的示例。它使用getline
並讀取逗號分隔文件(CSV),我讓你改變它來閱讀製表符分隔的文件。
ifstream fin(filename.c_str());
string buffer;
while(!fin.eof() && getline(fin, buffer))
{
size_t prev_pos = 0, curr_pos = 0;
vector<string> tokenlist;
string token;
// check string
assert(buffer.length() != 0);
// tokenize string buffer.
curr_pos = buffer.find(',', prev_pos);
while(1) {
if(curr_pos == string::npos)
curr_pos = buffer.length();
// could be zero
int token_length = curr_pos-prev_pos;
// create new token and add it to tokenlist.
token = buffer.substr(prev_pos, token_length);
tokenlist.push_back(token);
// reached end of the line
if(curr_pos == buffer.length())
break;
prev_pos = curr_pos+1;
curr_pos = buffer.find(',', prev_pos);
}
}
更新:改善條件。
'while(!fin.eof())'有幾個問題,這裏最大的只是捕獲文件的結尾。我建議'while(getline(fin,buffer))'捕獲你可能關心的每個錯誤情況。 – user4581301
@ user4581301謝謝,在最後加上缺失的行。 – vcp
你不需要測試eof。它在'getline'之後的'fin'狀態中隱含着。在'while(getline(...))'中,getline返回流。 'while'用流的布爾運算符測試流。如果出錯,布爾運算符返回false。以下是關於幕後發生的一些問題:http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool – user4581301
這可能是最簡單的方法,但vcp的方法可以更高效。
std::vector<string> tokens;
std::string token;
while (std::getline(infile, token, '\t')
{
tokens.push_back(token);
}
完成。您實際上可以將其降至大約三行代碼,其中包括input iterator和back inserter,但爲什麼?
現在,如果文件被分割成行並由這些行上的製表符分隔,則還必須處理行分隔符。現在,您只需執行上述操作兩次,一次循環顯示行和一個內循環來解析選項卡。
std::vector<string> tokens;
std::string line;
while (std::getline(infile, line)
{
std::stringstream instream(line)
std::string token;
while (std::getline(instream, token, '\t')
{
tokens.push_back(token);
}
}
如果你需要做的線,然後標籤,然後...我不知道...引號?三個循環。但說實話,我可能正在看寫作a state machine。我懷疑你的老師在這個階段想要什麼。
- 1. C++從空格分隔的文本文件填充字符串向量
- 2. 填充字符串的向量
- 3. 從輸入文件填充向量的字符串向量
- 4. 使用字符串向量填充SWT表
- 5. 使用製表符分隔數據填充註冊表
- 6. 填充的寬表與SSRS文本參數用分隔符
- 7. 由製表符分隔字符串
- 8. 解析製表符分隔字符串
- 9. 從分隔的字符串填充列表屬性
- 10. 文本模板的字符串填充
- 11. 如何在Autohotkey中分隔製表符分隔的字符串?
- 12. std ::向帶自定義分隔符的字符串向量
- 13. 使用Regex製表符分隔的字符串與RegexLineTokenizer
- 14. 使用Unicode字符的C#控制檯字符串填充
- 15. 用「||」分隔字符串分隔符
- 16. 用分隔符分隔字符串
- 17. 填充空字符串到文本
- 18. Android:字符串填充文本框
- 19. bash:用部分空格填充的字符串替換文本
- 20. 使用C的字符串分隔符
- 21. 分隔帶分隔符的字符串
- 22. 如何使用字符串分隔符分割字符串?
- 23. 使用字符串作爲分隔符來拆分字符串
- 24. 如何使用字符串分隔符分割字符串?
- 25. 如何使用分隔符將向量<char>分割爲字符串
- 26. 輸出製表符分隔字符串文件
- 27. 如何使用C#中的製表符分隔的文本文件填充數據表?
- 28. 使用JSON文件中的變量(字符串)填充文本區域
- 29. 使用fgetcsv製表符分隔文件
- 30. 使用變量分隔符分割字符串的shell腳本命令
提示:TAB的計數爲空格。從空白分隔的文本中讀取由'>>'操作符支持。 –
微不足道的「Hi there!\ tfishbeen」我是兩個代幣還是三個?如果你必須處理這個問題,[std :: getline有一個重載,它允許你指定一個分隔符來代替行尾。](http://en.cppreference.com/w/cpp/string/ basic_string/getline)用'\ t''使用該超載並開始閱讀。 – user4581301