2012-05-24 41 views
0

我想将文本文件中的某些文本放入数组中,但将数组中的文本设置为单个字符。 我该怎么做?C++将文本从文本文件放入数组作为单独的字符

目前我有

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cmath> 
#include <vector> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string line; 
    ifstream myfile ("maze.txt"); 
    if (myfile.is_open()) 
    { 
    while (myfile.good()) 
    { 
     getline (myfile,line); 
     // -------------------------------------- 
     string s(line); 
     istringstream iss(s); 

    do 
    { 
     string sub; 
     iss >> sub; 
     cout << "Substring: " << sub << endl; 
    } while (iss); 
// --------------------------------------------- 
    } 
    myfile.close(); 
    } 
    else cout << "Unable to open file"; 
    system ("pause"); 
    return 0; 
} 

我猜函数getline得到在一次一行。现在,我将如何将该行分割为单个字符,然后将这些字符放入数组中? 我正在一个C++课程的第一次,所以我新,是不错的:P

+0

您可能想再次看看C++(尤其是c)标准库*中的各种函数做了什么。很可能你正在做的比你需要的更难,因为你误解了类似c语言的字符串或IO的东西。 – dmckee

+2

'std :: string'是指一个字符数组,为什么你想把它们放到另一个数组中呢?另外,你的'fstream'代码写得很糟糕,你有没有把它从无用的cplusplus.com复制过来? –

+3

[不要循环while good()](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)。 (问题标题提到了eof,但同样的问题在这里:检查在输入之前)。 –

回答

8
std::ifstream file("hello.txt"); 
if (file) { 
    std::vector<char> vec(std::istreambuf_iterator<char>(file), 
         (std::istreambuf_iterator<char>())); 
} else { 
    // ... 
} 

非常优雅相比,使用循环和的push_back手动方法。

+0

唉,你打我:P。您可能想补充一点,它不仅更优雅,而且比push_back()效率更高。 – cristicbz

+0

这很好。我很少使用istreambuf_iterator,我忘记它存在! –

+4

@cristicbz:我不认为它实际上比push_back更有效 –

3
#include <vector> 
#include <fstream> 

int main() { 
    std::vector<char> myvector; 
    std::ifstream myfile("maze.txt"); 

    char c; 

    while(myfile.get(c)) { 
    myvector.push_back(c); 
    } 
} 
+0

感谢您的帮助:) – forthewinwin

相关问题