1

客观的:

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

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

现在的情况:

我有一个如下所示的文本文件:

beginning of file




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

others are farther apart
eof

这是我的一些代码,itemsInArray初始化为 at0和一个单词数组,称为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我无法使用的方法,以及迭代和删除换行符。我已经为此工作了几个小时,我不想重新发布相同的问题,并且尝试了很多方法。

4

3 回答 3

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'

这不是你想要的吗?

于 2015-02-01T03:41:17.477 回答
0

流的提取运算符应该为您处理好

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

    std::cout << word << "\n";
}
于 2015-02-01T03:40:51.860 回答
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();
}
于 2016-04-12T11:27:26.283 回答