2017-07-05 8 views
-1

基本的に、コードはユーザー入力を求めています。私はhotkdogという単語を入力して、関数FindIndexOfCharacter 'k'を3回使用したいと思います。しかし、関数は常に-1を返していますので、私のループは何らかの理由で++ではないと思いますか?ループがループしていないために文字配列[ポインタと文字配列]

#include <iostream> 
#include <cstring> 
#include <string> 

void ReadString(char * c, int maxLength); 
int FindIndexOfCharacter(char * c, char testVal); 

int main() 
{ 
    const int SIZE = 10; 
    char ca[SIZE]; 
    char * cpointer = ca; 

    ReadString(cpointer, 10); 
    std::cout << FindIndexOfCharacter(cpointer, 'k'); 
    system("pause"); 
} 

void ReadString(char * c, int Length) 
{ 
    std::cout << "Enter a string " << Length << " characters." << std::endl; 
    std::cin >> c; 
} 

int FindIndexOfCharacter(char * c, char Val) 
{ 
    int sizeOfArray2 = std::strlen(c); 
    std::cout << sizeOfArray2 << std::endl; // this confirms array size 

    for (int i = 0; i < sizeOfArray2; ++i) 
    { 
     if (c[i] == Val) 
      return i; 
     else 
      return -1; 
    } 
} 
+0

それは '++ i'、あなたは'の最初の反復にreturn'ingされていませんループ – UnholySheep

+1

バッファオーバーランの問題があります: 'std :: cin >> c'。 12文字を入力して調べます。 –

+0

'FindIndexOfChar'のループを' strchr'に置き換えることを強くお勧めします。 'strchr'は配列へのポインタを返すので、' strchr'の結果から配列の先頭を引いてインデックスを得ることができます。インデックスを計算する前に 'strchr'の結果を検証することを忘れないでください。 –

答えて

3
for (int i = 0; i < sizeOfArray2; ++i) 
{ 
    if (c[i] == Val) 
     return i; 
    else 
     return -1; 
} 

あなたは最初の文字だけをチェックしています。一致しない場合はすぐに-1を返します。

代わりに次の文字に進む必要があります。

おそらく試してみてください。

for (int i = 0; i < sizeOfArray2; ++i) 
{ 
    if (c[i] == Val) 
     return i; 
} 

return -1; 
1

あなたの機能を変更することができます:もちろん

char * p_found = strchr(c, Val); 
if (p_found != nullptr) 
{ 
    return p_found - c; 
} 
return -1; 
関連する問題