2016-08-15 12 views
-2

文字列の文字カウントを配列のインデックス要素と比較しようとしていますが、問題があります。ユーザ入力は、XXに等しい場合 例えば、出力は次のようになります文字列と配列を比較するC++

XXの位置に配列されていない0

XX 1.

XXはしていない位置に配列しています位置2の配列。

arr[] = {"X", "XX", "XXX"}; 
string userInput; 
cin >> userInput; 

    for (int i = 0; i < userInput.length(); i++) 
{ 
    if (userInput[i] == arr[i]) 
    { 
     cout << userInput << " is in the array at position " << i << endl; 
    } 
    else 
    { 
     cout << userInput << " is not in the array at position " << i << endl; 

私はこのエラーを受け取り、それを修正する方法がわかりません。私はプログラミングにかなり新しいので、どんな助けも素晴らしいだろう。ありがとうございました。バイナリ表現( 'INT' と '文字列'(別名 'のbasic_string、アロケータ>'))上記アレイを仮定

+0

ごめんなさい。私は持っている:using namespace std;私のコードの始めに。 – Mludbey

+1

@Mludbeyこのような問題を解決する適切なツールは、デバッガを使用することですが、そうする前にStack Overflowで尋ねないようにしてください。 1つ目の行でコードを検査するときに行ったすべての観察を教えてください。また、[**小さなプログラムをデバッグする方法(Eric Lippertによる)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**]を読んでみてください。あなたの問題を再現する** [MCVE] **を私たちに任せてください。 (これはπάνταῥεῖ™によって提供された個人的なコメントです) –

+0

あなたのプログラムを誤読して翻訳しました。申し訳ありません。最初にタイプのないarr []があります。これは 'string arr []'ですか?もしそうなら、あなたはあなたのものではなく、 'if(userInput == arr [i])'と言うだけでいいです。 –

答えて

1
arr[] = {"X", "XX", "XXX"}; 

無効オペランドは、文字列として定義されます。ユーザ入力が文字列であるため

cin >> userInput; 

getline(cin,userInput) 

に置き換える必要があります。

if (userInput[i] == arr[i]) 

は、そうでない場合

if (userInput == arr[i]) 

に置き換えるべき条件文では、あなたは私が

インデックスユーザ入力文字列の文字を比較します。最後に、全体として、これはどのようにあなたのコードすべきです見る

string arr[] = {"X", "XX", "XXX"}; 

string userInput; 
getline(cin,userInput); 
for (int i = 0; i < userInput.length(); i++) 
{ 
    if (userInput == arr[i]) 
    { 
     cout << userInput << " is in the array at position " << i << endl; 
    } 
    else 
    { 
     cout << userInput << " is not in the array at position " << i << endl; 
    } 
} 
1

あなたの問題は、各文字配列の各文字列と入力の​​はという文字をに、userInputの位置にはi(0から開始)です。 arr[i]の文字列arrの位置i(0から始まります)に示します。誤って存在しないarr[3]にアクセスしようとすると、別のエラー(動作しても)が発生します。これを代わりに使用してください:

#include <iostream> 
#include <string>  // Used for std::getline() 

// Don't use 'namespace std' - it's bad practice 

int main() 
{ 
    int arrSize = 3; // Now we know the size of the array, we won't exceed arr[2] 
    std::string arr[3] = { "X", "XX", "XXX" }; 
    std::string input; 

    std::cout << "Enter input: "; // A propmt would be useful 
    std::getline(std::cin, input); // Much better way to get input 

    for (unsigned int i = 0; i < arrSize; ++i) // Now we won't exceed the array size 
    { 
     if (input == arr[i]) // Compare the input string (not character) with each string in arr[] 
      std::cout << "Your input is at position " << i << std::endl; 
     else 
      std::cout << "Your input is not at position " << i << std::endl; 
    } 

    std::cin.ignore();  // Wait for user to press enter before exiting 
    return 0; 
} 
+0

これは役に立ちますが、私は入力文字と配列文字列を比較したいと思います。たとえば、入力= XXXLMの場合は、XXXまで読んでLM – Mludbey

+0

@Mludbeyを無視します。質問の最初に非常に明示的に述べておきます。それがそのままで、あなたが比較したいものはあまり明確ではありません。 –

+0

@Mludbey XLMやXXLMやMだけでなく、LMを無視したい理由も明確ではありません。 –