1

少し問題があります。英単語のみを含むテキスト ファイルがあります。スペースを無視して、ファイルの単語のみを表示したい。コードは次のとおりです。

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

出力に予期しない文字が表示されるようになりました。問題がどこにあるか言及できますか?

4

5 に答える 5

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;
    }
}
于 2012-10-28T16:32:10.730 に答える
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';
}
于 2012-10-28T16:35:54.823 に答える
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));
}

もちろん、単語の間に何かを印刷したいかもしれません...

于 2012-10-28T16:49:32.983 に答える
0

一部の変数が初期化されていません。(ところで、 をfgetc返します。intに対してテストすることが重要EOFです) 標準 C でのより簡単なソリューション:

#include <stdio.h>

int c;

while ((c = getchar()) != EOF) {
     if (c == ' ')
         putchar('\n');
     else
         putchar(c);
}
于 2012-10-28T16:32:51.520 に答える
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;
}
于 2012-10-28T16:37:57.437 に答える