我有点问题。我有一个只包含英文单词的文本文件。我想只显示文件中的单词,忽略空格。 这是代码:
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<stdio.h>
#define max 50
void main()
{
clrscr();
char output;
FILE *p;
char a[max];
int i=0;
p=fopen("thisfile.txt","r");
while(1)
{
char ch=fgetc(p);
if(ch==EOF)
{
break;
}
else if(ch==' ')
{
cout<<a;
delete [] a;
i=0;
}
else
{
a[i++]=ch;
}
}
fclose(p);
getch();
}
现在我在输出中收到了一些意想不到的字符。你能提一下问题所在吗?
答案 0 :(得分:3)
这是一个很简单的 更简单的解决方案:
#include <string>
#include <fstream>
#include <iostream>
int main()
{
std::ifstream infile("thisfile.txt");
for (std::string word; infile >> word; )
{
std::cout << "Got one word: " << word << std::endl;
}
}
答案 1 :(得分:1)
这是一种可以迭代单词的方法:
#include <fstream>
#include <iostream>
#include <ostream>
#include <iterator>
#include <string>
int main()
{
std::ifstream file("test.txt");
std::istream_iterator<std::string> begin(file), end;
for(; begin!= end; ++ begin)
std::cout<< *begin<< '\n';
}
答案 2 :(得分:0)
您的某些变量未初始化。 (顺便说一下,fgetc
返回 int
,对EOF
进行测试非常重要。标准C中的一个更简单的解决方案:
#include <stdio.h>
int c;
while ((c = getchar()) != EOF) {
if (c == ' ')
putchar('\n');
else
putchar(c);
}
答案 3 :(得分:0)
你为什么不试试这个:
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
int main() {
clrscr();
string s;
ifstream in("file.txt");
while(in >> s) {
cout << s << endl;
}
in.close();
return 0;
}
答案 4 :(得分:0)
我喜欢简洁明了:
#include <iostream>
#include <iterator>
#include <fstream>
#include <algorithm>
int main() {
std::copy(std::istream_iterator<std::string>(std::ifstream("test.txt") >> std::ws),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout));
}
当然,您可能希望在单词之间打印一些内容......