2016-03-26 14 views
-1
string letter; 
    char words[5] = { 'd','o','g','s','a'}; 
    for (char i = 0; i < 5; i++) 
    { 
     cout << words[i] << " "; 
     cout; 
    } 
    cout << "enter letter: "; 
    cin >> letter; 
    (words.find(letter)); 

    int position= words.find(letter); 
    cout << "position is " << position+ 1 << endl; 


bool binarySearch (char usedLetters[], int numGuessedLetters, char guess) 
{ 

    int length = sizeof(usedLetters)/sizeof(usedLetters[0]); 
    cout << length << endl; 

    int first = 0; 
    int last = length - 1; 
    int mid; 

    while (first <= last) 
    { mid = (first + last)/2; 
     if (usedLetters[mid]== guess) 
      return true; 
     if (usedLetters[mid] > guess) 
      last = mid - 1; 
     else 
      first = mid + 1; 
    } 
    return false; 
} 

私は配列を検索しようとしています。私は手紙を入力して手紙の位置を得ることができるようにしたい。現時点では機能していません。私はエラーの両方の下にエラーが表示されますエラー "char words [14]エラー:expersionクラスの型を持っている必要がありますどのようにこのコードを動作させる方法を提案します。あなたは文字の配列で見つける呼び出すことはできません。インデックス作成

(words.find(letter)); // Not correct 

ウェイの言葉に基づいて便利

+0

char []には機能がありません。 findのコードを投稿できますか? – elyashiv

+0

1文字ではなく文字列を検索しようとしています(文字列には1文字しか含まれていません)。 – Galik

答えて

2

C++の方法は、このように、char[]の代わりにstd::stringを使用することです:あなたは、あなたが常にすることができ、何らかの理由char[]でスタックしている場合

std::string letter; 
    std::string words = "dogsa"; 
    std::cout << "enter letter: "; 
    std::cin >> letter; 

    int position = words.find(letter); 
    std::cout << "position is " << position + 1 << std::endl; 

これをstd::stringに変更してください:

std::string letter; 
    char words[5] = { 'd','o','g','s','a'}; 
    std::cout << "enter letter: "; 
    std::cin >> letter; 
    std::string sentence (words,5); 
    int position = sentence.find(letter); 
    std::cout << "position is " << position + 1 << std::endl; 

または手動で配列を反復処理は、次のように:

std::string letter; 
    char words[5] = { 'd','o','g','s','a'}; 
    std::cout << "enter letter: "; 
    std::cin >> letter; 
    for (int i = 0; i<5; i++) { 
    if (words[i] == letter[0]) 
     std::cout << "position is " << i + 1 << std::endl; 
    } 
-1

は動作しませんよう、宣言されています。

0

あなたはwords.find(letter);を書き込むことはできません。言葉配列であり、配列はオブジェクトではありません 文字を検索してその位置を返す関数を記述する必要があります。

2

使用std::find

auto pos = std::find(std::cbegin(words), std::cend(words), 's'); 
if (pos != std::cend(words)) { 
    std::cout << "found : '" << *pos 
       << "' at position: " << std::distance(std::cbegin(words), pos); 
} 
0

使用既存のライブラリ、それは読める、より安全で、高速です。

あなたはstd::findを使用することができますし、あなたがbegin()からの結果とfindから結果を引くことができ、位置を取得するには:

int main() 
{ 
    vector<char> vec { 'd', 'o', 'g', 's', 'a' }; 
    auto to_find = 'g'; 
    auto result = find(cbegin(vec), cend(vec), to_find); 

    if (result != cend(vec)) 
     cout << "Index: " << (result - cbegin(vec)) << '\n'; 
    else 
     cout << "Not found" << '\n'; 
} 

あなたのコンパイラがC++ 14をサポートしていない場合、あなたはbegin() &を使用することができます代わりにend()またはvec.begin() & vec.end()です。

関連する問題