在C/C 中显示来自TXT文件的单词

displaying words from a txt file in c/c++

本文关键字:TXT 文件 单词 显示      更新时间:2023-10-16

我有一个小问题。我有一个仅包含英语单词的文本文件。我只想显示文件中的单词,忽略空格。这是代码:

#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();
}

现在,我在输出中获得了一些意外的字符。您能否提及问题在哪里?

这是一个很多,更简单的解决方案:

#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;
    }
}

这是您可以通过单词迭代的一种方式:

#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';
}

您的某些变量未初始化。(顺便说一句,fgetc返回 int ,对EOF进行测试很重要)在标准C中更轻松的解决方案:

#include <stdio.h>
int c;
while ((c = getchar()) != EOF) {
     if (c == ' ')
         putchar('n');
     else
         putchar(c);
}

为什么不尝试此操作:

#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;
}

我喜欢简洁明了:

#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));
}

当然,您可能想在单词之间打印一些东西...