• 締切済み

二次元的な(?)文字列から指定した箇所の数を取り出す方法を教えてください

はじめまして。 C++を勉強している途中なのですが、興味本位でwin32apiに手を出してみたのですが、文字列について混乱中です。 http://www.geocities.jp/ky_webid/win32c/051.htmlの使用例を参考にして、テキストファイルtext.txtから文字を抽出し、MessageBoxで表示できるようになりました。 使用例というのは、↓です。 HANDLE hFile; // ファイルを開く。ReadFile()が目的なのでGENERIC_READ指定が必須 hFile = CreateFile( _T("test.dat"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( hFile != INVALID_HANDLE_VALUE ) // 本当に開くことができたか { TCHAR buf[256]; DWORD readsize; // 使わないとしても、読み取ったサイズは受け取らなくてはならない // bufに読み込んで、結果をメッセージボックスに表示 ReadFile( hFile, buf, sizeof(buf), &readsize, NULL ); buf[readsize] = _T('\0'); // 末尾に'\0'が無いので付加 MessageBox( hWnd, buf, _T("結果"), MB_OK ); // 最後に忘れずにファイルハンドルを閉じる CloseHandle( hFile ); } テキストファイルtext.txtの中身は、↓のようになっています。 1 2 aui 2 4 sd 6 7 db 2 1 cx ですので、MessageBoxでも、↑のように表示されたのを確認しました。 bufの中に↑の数字と文字が代入されているということなのでしょうが、たとえば4を指定したり、dbを指定したりと、一つずつ抽出する方法がわかりません。 配列みたいにbuf[1][1]と書いてみても、「int型はcharに変換できない」といった感じのエラーが表示されるだけでした。 この文字列bufにある文字や数字を一つずつ抽出する方法を教えてください。

みんなの回答

  • ttega
  • ベストアンサー率52% (9/17)
回答No.1

TCHAR buf[256]; と宣言/定義しているので、buf は一次元配列ではありません。 したがって、改行文字も含めて、テキストの中身がぜんぶつながった状態で buf に入っています。buf[0] なら最初の文字 '1' に、buf[2] なら(スペースを挟んで)次の文字 '2' にアクセスすることができます。 "db" のような文字列単位でのアクセスはできないので、そういうことをしたければ空白文字で区切るような処理を自分で書かないといけません。

関連するQ&A

専門家に質問してみよう