2015-01-16 75 views
1

的不输出下一个实例我有以下代码While循环并串

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

int main(){ 
    std::string file = "words.txt"; 
    std::string word; 
    std::ifstream inFile; 
    std::string delimiter = ","; 
    inFile.open(file); 
    if (!inFile){ 
     std::cerr << "File not opened." << std::endl; 
    } 
    while (getline(inFile, word)){ 
     std::cout << word.substr(0, word.find(delimiter)) << " "; 
     word.erase(0, word.find(delimiter) + delimiter.length()); 
    } 
    inFile.close(); 
    std::cin.get(); 
} 

在这个循环的一个问题:

while (getline(inFile, word)){ 
     std::cout << word.substr(0, word.find(delimiter)) << " "; 
     word.erase(0, word.find(delimiter) + delimiter.length()); 
    } 

我收到的唯一输出的第一子在输出中形成"word1"

我已经在擦除函数后面的行中输入了一个std::cout << word.substr(0, word.find(delimiter)),以确定该单词是否仍然有字符,并且确实如此。 word是格式为"word1","word2","word3",...,"lastword"的很长的字符串,我的分隔符是","

+4

你遍历文件中的行,没有结束的一行字。做'getline(inFile,word,',')',而不需要做任何'substr'业务。如果你需要迭代这些行中的行和单词,你将需要嵌套循环。 –

回答

2

as @Joseph Mansfield在评论中说。你遍历文件的行,而不是它的文字。

对于分词,,您可以简单地使用分隔符作为getline的第三个输入。

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

int main(){ 
    std::string file = "words.txt"; 
    std::string word; 
    std::ifstream inFile; 
    char delimiter = ','; 
    inFile.open(file); 
    if (!inFile){ 
     std::cerr << "File not opened." << std::endl; 
    } 
    while (getline(inFile, word,delimiter)){ 
     std::cout << word << " "; 
    } 
    inFile.close(); 
    std::cin.get(); 
} 

以及用于读取多行:

std::string line; 
while (getline(inFile, line)){ 
    std::stringstream stream(line); 
    while (getline(stream, word, delimiter)){ 
     std::cout << word << " "; 
    } 
} 
0

在您阅读下一行的同时,使用getline(inFile,word)。因此现在包含下一个读取