0

次のようなテキスト ファイルがあります。

「2 スペード 3 スペード 4 スペード」など。

このコードを使用して単語を抽出しています:

   char *temp;
   temp = new char[20];

   fin >> *temp;
   charCount=stringLength(temp);
   deckPtr->rank = new char[charCount+1];
   stringCopy(temp, deckPtr->rank);

   fin >> *temp;
   charCount=stringLength(temp);
   deckPtr->suit = new char[charCount+1];
   stringCopy(temp, deckPtr->suit);

2 番目と 3 番目の部分はループ内にあり、すべての構造体メンバーを書き込んだ後、次の「カード」に進みます。

(stringCopy と stringLength は私が自分で書いた関数であり、動作することがテストされています)

後で構造体のメンバーを数えてみると、一度に 1 つの文字しか抽出されていないことがわかりました。たとえば、最初の要素のランクは 't'、スートは 'w' で、その後、'o' と 's' で次のカードのスートとランクに続きます... 明らかに、時間を抽出しています。空白で終わる文字列全体を取得するにはどうすればよいですか?

4

1 に答える 1

1

問題はそれです:

fin >> *temp;

<stream> >> <char>

したがって、文字のみを読み取ります。
ストリームから char を読み取っています。

あなたが望むのは、文字列(または単語)を読むことです

<stream>  >> <C-String>

// This is expressed as:
fin >> temp; // Note no '*'

std::string と std::vector を使用してこれを記述すると、約 10 行のコードになります。いくつかの C++ 機能を使用して C でこのように記述すると、正しく記述することがはるかに難しくなります。

于 2013-02-28T00:01:19.407 に答える