如何忽略"行结束"或"新线"逐字阅读文本文件时的字符?

时间:2015-02-01 03:30:05

标签: c++ arrays getline end-of-line

目的:

我正逐字逐句地阅读文本文件,并将每个单词保存为数组中的元素。然后,我逐字逐句地打印出这个数组。我知道这可以更有效地完成,但这是一个任务,我必须使用一个数组。

我正在对数组做更多事情,例如计算重复元素,删除某些元素等。我也成功地将文件转换为完全小写且没有标点符号。

现状:

我有一个看起来像这样的文本文件:

beginning of file




more lines with some bizzare     spacing
some lines next to each other
while

others are farther apart
eof

以下是我的一些代码itemsInArray已初始化为0且一系列字词被称为wordArray[ (approriate length for my file ) ]


ifstream infile;
infile.open(fileExample);

while (!infile.eof()) {

    string temp;
    getline(infile,temp,' ');  // Successfully reads words seperated by a single space


    if ((temp != "") && (temp != '\n') && (temp != " ") && (temp != "\n") && (temp != "\0") {
            wordArray[itemsInArray] = temp;
            itemsInArray++;
    }

问题:

我的代码将行尾字符保存为数组中的项目。在我的if语句中,我列出了我试图排除行尾字符的所有方法,但我没有运气。

如何防止行尾字符作为数组中的项目保存?

我已经尝试了一些我在类似的线程上找到的其他方法,包括*const char的某些我无法工作的方法,以及迭代和删除新的方法行字符。我已经在这方面工作了好几个小时,我不想重新发布同样的问题,并尝试了很多方法。

3 个答案:

答案 0 :(得分:3)

>>重载的标准std::string运算符已使用空格作为单词边界,因此您的程序可以简化很多。

#include <iostream>
#include <string>
#include <vector>

int
main()
{
  std::vector<std::string> words {};
  {
    std::string tmp {};
    while (std::cin >> tmp)
      words.push_back(tmp);
  }
  for (const auto& word : words)
    std::cout << "'" << word << "'" << std::endl;
}

对于您要显示的输入,将输出:

'beginning'
'of'
'file'
'more'
'lines'
'with'
'some'
'bizzare'
'spacing'
'some'
'lines'
'next'
'to'
'each'
'other'
'while'
'others'
'are'
'farther'
'apart'
'eof'

这不是你想要的吗?

答案 1 :(得分:0)

流的提取操作员应该为您处理

std::ifstream ifs("file.txt");
while (ifs.good())
{
    std::string word;
    ifs >> word;
    if (ifs.eof())
    {
        break;
    }

    std::cout << word << "\n";
}

答案 2 :(得分:0)

int main()
{  
    char *n;
    int count=0,count1=0;
    ofstream output("user.txt");
    output<<"aa bb cc";
    output.close();
    ifstream input("user.txt");
    while(!input.eof())
    {
        count++;
        if(count1<count)
        cout<<" ";
        count1=count;

        input>>n;
        cout<<n;
    }
    cout<<"\ncount="<<count;
    getch();
}