2016-09-08 5 views
-1

私はプログラミングに慣れていないので、私の次の質問はおそらくあなたのほとんどのために答えるのが簡単だろう。ここに行きます:C++:配列の内容とユーザー入力を比較するには?

  1. 私は定義済みの内容の文字列を持っています。
  2. 私はユーザーに何らかの入力を求めます。
  3. 入力が配列の要素の1つと同じかどうかを確認したいと思います。 3a。一致するものがあれば、その配列の「ブロック」をプリントアウトしたいと思います。 3b。一致するものがない場合は、ユーザーに一致するものがないことを通知したいと思います。

これまでのところ、私はポイント3aまで取得できましたが、それ以上はありませんでした。私に提案してもらえますか? はここで、これまでに私のコード(せ)です。残念ながら

string fixed_array[4] = {"apple", "orange", "banana", "kiwi"}; 
cout << "Please enter something:\n"; 
string user_input; 
cin >> user_input; 
for (int i=0; i!=4; i++) { 
    if (user_input == fixed_array[i]) {cout << "Fruit is in " << i << "\n";} 

私は要求された果実は、アレイ内にない場合、私は「もし」の後に「他の」を追加しているかのように、ユーザに通知する方法がわかりませんプログラムは、配列要素との不一致があるたびに、「見つからない」というメッセージを自然に書き出します。

私はループの出口信号を考えていました(boolかもしれませんか?):ループ内で一致がある場合はtrue:一致しない場合はfalse:false次に、単純な 'if'ステートメントでこのboolを使用して、 'not found'メッセージを表示します。

このようにすることは可能ですか、それとも完全にオフですか?

ありがとうございます!配列を検索する

bool found = false; 
string fixed_array[4] = {"apple", "orange", "banana", "kiwi"}; 
cout << "Please enter something:\n"; 
string user_input; 
cin >> user_input; 
for (int i=0; i!=4; i++) { 
    if (user_input == fixed_array[i]) { 
     cout << "Fruit is at index " << i << "\n"; 
     found = true; 
     break; //So the loop ends at the current index. This is not needed though 
    } 
} 
if (!found) 
{ 
    std::cout << "Not Found!\n"; 
} 
+0

「break; –

+1

フラグ(ブール変数)を使用します。ループを通過してフラグを設定せずに(アイテムを見つける)、あなたは知っていて、見つからなかったメッセージを印刷することができます。 – NathanOliver

+0

@ Jean-FrançoisFabreどこにでも「休憩」を投げているのは間違いなく道のりです – deW1

答えて

0

あなたはフラグを使用することができ、found

その後、インデックスを取得するために

std::distance

を使用しています。ここで

は、サンプルコード

#include <string> 
#include <iterator> 
#include <iostream> 

int main() 
{ 
    std::string fixed_array[4] = { "apple", "orange", "banana", "kiwi" }; 

    std::cout << "Please enter something: "; 
    std::string user_input; 
    std::cin >> user_input; 

    auto start = std::begin(fixed_array); 
    auto end = std::end(fixed_array); 

    auto foundLocation = std::find(start, end, user_input); 

    bool isFound = foundLocation != end; 

    if (isFound) { 
     int index = std::distance(fixed_array, foundLocation); 
     std::cout << "Found " << user_input << " at index " << index << std::endl; 
    } 
    else { 
     std::cout << "Not found" << std::endl; 
    } 

    return 0; 
} 
0

使用

std::find

:要素がこのように発見された場合trueに設定されます

0

は、入力がない出力のみと異なっている場合、それはあなたの配列の最後の要素である場合は、単にかどうかを確認するためにループのためのあなたの文を、他を追加することができますです果物の:

string fixed_array[4] = {"apple", "orange", "banana", "kiwi"}; 
cout << "Please enter something:\n"; 
string user_input; 
cin >> user_input; 
for (int i=0; i != 4; i++) { 
    if (user_input == fixed_array[i]) { 
     cout << "Fruit is in " << i << "\n"; 
     break; 
    } 
    else if (i == 3) { 
     cout << "The fruit is not found.\n"; 
    } 
} 

フルーツが発見された場合、果実が発見された場合、他のif文が実行されず、決してので、これは動作しますが、それはループの実行される最後の時間ではありません、そうでない場合実行されません。これは、フルーツが見つからず、forループが最後に実行されている場合にのみ実行されます。これは、フルーツが配列内にないことを意味するためです。

0

私は必要な部分に説明的なコメントを付けました。

#include <iostream> 
#include <string> 

// Define the fixed array size 
const int FIXED_ARRAY_SIZE = 5; 
const int NOT_FOUND   = -1; 

int main() 
{ 
    std::string fixed_array[ FIXED_ARRAY_SIZE ] = { "apple" , 
                "orange" , 
                "banana" , 
                "kiwi" , 
                "star fruit" }; 
    std::string user_input      = ""; 

    int   fruitIndex      = NOT_FOUND; 


    std::cout << "Please enter a fruit name you would like to search for:" << std::endl; 

    // use std::getline instead to assure you can also search for fruits 
    // that contain multiple words 
    std::getline(std::cin , user_input); 

    // you can use the fruit index here with a preset value you can check for 
    // that indicates that it's been found 
    for(int i = 0 ; (i < FIXED_ARRAY_SIZE) && (fruitIndex == NOT_FOUND) ; ++i) 
    { 
     if(fixed_array[ i ] == user_input) 
     { 
      fruitIndex = i; 
     } 
    } 

    // check if the fruit has been found and proceed with output 
    if(fruitIndex != NOT_FOUND) 
    { 
     std::cout << "Fruit found on position: " << fruitIndex << std::endl; 
    } 
    else 
    { 
     std::cout << "Sorry, the fruit '" << user_input << "' is unknown to me!" << std::endl; 
    } 

    std::getchar(); 

    return 0; 
} 
関連する問題