2017-05-07 4 views
-2

わからない宿題の質問。うそをつくことさえありません。私の関数が探している文字を見つける配列インデックスを返すか、文字が見つからない場合は-1を返します。代わりに、配列要素に格納されている値を返します。つまり「これは私の文字列です」と入力すると8を返しますが、代わりに109(MのASCIIコード)を返します。配列の値ではなく配列のインデックスを返したい

int search(const std::string &array, char character) { 
    for (int i = 0; i < array.length(); i++) { 
     if (i = character) { 
      return i; 
     } 
     return -1; 
    } 
} 

私は宿題から休みを取っていますが、助言をいただければ幸いです。明日は新鮮な目で問題を見るかもしれない。

+4

'(I =文字)' - > '(I ==文字)' - > '(配列[i]を==文字)' – DeiDei

+0

スポイラー:別の問題があります。探し続ける;) – Quentin

答えて

1
int search(const std::string &array, char character) { 
    for (int i = 0; i < array.length(); i++) { 
     if (i **==**character) { 
      return i; 
     } 
     return -1; 
    } 
} 

ループでは、i =文字は比較ではなく、割り当てです。 C++では、比較演算子は==です。サイドノートでは

が、あなたは私が見ることができなかった何の機能 find()

EDIT

によってあなたの全体の機能を置き換えることができます間違っているし、あなたのためにもあなたの場合ということです。ここで

がコードの作業部分です:

#include<string> 
#include<iostream> 
int search(const std::string &array, char character) { 
    for (int i = 0; i < array.length(); i++) { 
     if (array[i] == character) { 
      return i; 
     } 

    } 
    return -1; 
} 

int main(){ 
std::string meh = "meh"; 
std::cout << search(meh,'e') << std::endl; 

} 

最初のエラー、あなたは文字の配列ではなく、カウンタ(i)の要素を比較する必要があります。 2番目のエラーは、失敗した場合は-1を返します。しかし、文字が文字列の最初の文字でない場合、それは失敗します。

私がもう一度見てくれてありがとう@quentin。

+0

アソシエンス割り当て。しかし、それはこのコードの唯一の問題です。 – Quentin

+0

ありがとうございました...私は元々ダブルを持っていましたが、何かを試していた間にそれを変更したに違いありません。配列[私]は、それを知ってくれたことに感謝してくれました。これは私が理解できなかった私の宿題に関する唯一の質問でした。再度、感謝します。 P.S.あなたの回答をアップアップすることはできません。 – Sean

0
#include <iostream> 
int search(const std::string &array, char character); 
int main() { 
const std::string string1 = "daidalos"; 
std::cout << search(string1, 'i'); 
return 0; 
} 
int search(const std::string &array, char character) { 
for (int i = 0; i < array.length(); i++) { 
    if (array[i] == character) { 
     return i+1; 
    } 
} 
return -1; 
} 

出力: 3あなたは、文字列の複数のインデックスを返したい場合は、あなたがstd::pairstd::tuppleを使用することができる3位(真).Howeverを意味します。

1

のstd ::文字列::見つけるには、()正確に何をしたいが返されます。

std::size_t search(const std::string& array, char character) 
{ 
    return array.find(character); // if 'character' is not found returns std::string::npos 
} 

そして、あなたはそれを使用しない場合:

Excatly
std::size_t search(const std::string& array, char character) 
{ 
    for(std::size_t i=0; i<array.size(); ++i) 
     if(array[i]==character) return i; 
    return -1; 
} 
+0

私はそれを使いたがっていましたが、私の先生は私にしたくありませんでした。私は明らかに配列/ループについてもっと練習が必要なので推測しています。 – Sean

0

私が探していたもの。

#include<string> 
#include<iostream> 
int search(const std::string &array, char character) { 
    for (int i = 0; i < array.length(); i++) { 
     if (array[i] == character) { 
      return i; 
     } 

    } 
    return -1; 
} 
関連する問題