2016-04-20 20 views
3

これは既にカバーされていますが、私は過去数時間を探していましたが、私は狂気の奥に追い込まれています。ファイルを検索して整数を検索する方法

私は基本的にファイル内のどこにでも整数を持つことができる入力ファイルを読み込まなければなりません。

サンプル入力:

ワードワードワードワード5ワードワード7ワードワードワードワードワード8ワードワードワードワード。単語単語単語単語単語単語67.単語9

私は整数だけを取得し、次にベクトルに整数を入れる必要があります。私は一度に文字でそれを読んでみた後、それをint型に変換しましたが、それは実際には機能しません。私は文字列を介してそれを読み込み、それを整数に変換しようとしましたが、それはどちらも動作しません。数字はファイル内の任意の場所にある可能性があります。私はこれが理にかなったことを願っていますが、どんな助力も認められます。

私はVisual Studioを使用しています。私はまた、C++でプログラミングしています。

+0

あなたは入力全体を読んで、スペースで単語の配列に分割してから、単語を消去しなければなりません(ドットやカンマを削除してください)。そして単語が整数であるかどうかテストしてください。 。それを試してみましたか?もしあなたがしていて、それがうまくいかなかったのなら、なぜ – Gubr

+0

私はしていません。私に試してそれを実装する時間を与えてください。ありがとう! – Eisenhower

+1

私には宿題が聞こえます。 – Joel

答えて

2

このプログラムは、stdin(必要に応じて別のistreamを使うことができます)で整数を探して、1行に1つずつ出力します。

#include <iostream> 

int main() 
{ 
    std::istream& input = std::cin; 
    intmax_t value; 
    while (!input.eof()) { 
     if (input >> value) { 
      std::cout << value << '\n'; 
     } else { // not an integer, ignore up to next space                
      input.clear(); 
      input.ignore(std::numeric_limits<std::streamsize>::max(), ' '); 
     } 
    } 
} 
0

また<regex>試すことができます。

const std::string input{"word word word word 5 word word 7 word word word word word 8 word word word word. word word word word word word 67. word 9"}; 

std::regex numbers_pattern(R"((\b\d+()\b))"); 

for (std::sregex_token_iterator begin(input.begin(), input.end(), 
    numbers_pattern, 1), end; begin != end; ++begin) 
{ 
    std::cout << *begin << '\n'; 
} 

をこの正規表現イテレータを使用すると、文字列内の数字を探し、テキストとしてそれらをキャプチャすることができ、その後、あなたが好きなアプローチで番号にテキストを変換します最も。

Demoをご覧ください。

ファイルと一緒に使用するには、std::string inputをファイルストリームに置き換える必要があります。

関連する問題