我正逐字逐句地阅读文本文件,并将每个单词保存为数组中的元素。然后,我逐字逐句地打印出这个数组。我知道这可以更有效地完成,但这是一个任务,我必须使用一个数组。
我正在对数组做更多事情,例如计算重复元素,删除某些元素等。我也成功地将文件转换为完全小写且没有标点符号。
我有一个看起来像这样的文本文件:
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
的某些我无法工作的方法,以及迭代和删除新的方法行字符。我已经在这方面工作了好几个小时,我不想重新发布同样的问题,并尝试了很多方法。
答案 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();
}