2014-01-16 6 views
5

私はユーザー入力を受け取り、指定された文字に値を割り当てることができるようにしたいと考えています。私はその部分を持っていると思う、今問題は値を返す。関数が値を返さないようにする

#include <iostream> 
#include <string> 
using namespace std; 

int ch2n(string word); 

int main() 
{ 
    string inputWord; 

    cout << "Type Word: "; 
    cin >> inputWord; 
    cout << ch2n(inputWord); 
} 

int ch2n(string word) 
{ 
    int total = 0; 
    for(int i = 0;i != word.size(); i++) 
    { 
     if(word.find(i) == 'a' || word.find(i) == 'A') 
     { 
      total += 1; 
     } 
    } 
    return total; 
} 

私は0に合計を宣言するとき、リターンは常に0ですが、私はそれを宣言していないとき、私は....などの乱数を229の戻り値を取得します。

+0

を、あなたが呼び出すことができます 'のhttp:// en.cppreference.com/W/CPP /アルゴリズム/ count' – billz

+0

あなただけの関数を記述すべきである' int型のCH 2 N() '上記'int main()'宣言を使用するのではなく、 – Hosch250

+0

私はむしろstring.findの使用が考え直す必要があると考えます –

答えて

4

あなたはそれが未定義の動作であり、任意のランダムな値を返すことができます使用して、(その値を設定し)、それを初期化しない場合 - intだけのスペースを割り当て、undefinedd値を持つことになりますように、コンストラクタなし0

タイプなどを一般的には、以前の使用からその場所にあったことに基づいています。

word.findあなたはそれがないと思う何をしない、それがiを探しているあなただけword[]を使用したい

word中:

if(word[i] == 'a' || word[i] == 'A') 

また、あなたが最後にstd::endlを置きたいかもしれませんあなたのcout行の

+0

たとえば、単語を入力すると、文字aまたはAppleという文字が返されます。値を1ずつ増やしたい場合は戻り値が0になります。 –

+0

thats different質問: –

+0

他に何か、またはあなたの質問に答えていますか? –

8

私はword.find(i)と思うかもしれません。文字列内の特定の文字にアクセスするには、角括弧(word.find(i)の代わりにword[i])を使用します。

+2

さらに、 tolower(word [i])== 'a''の代わりに 'word.find(i)==' a '|| word.find(i)== 'A'' – Hosch250

+0

haha​​、私の愚かなこと。どうもありがとうございました。 –

+0

@ user2509848ありがとう、それはor演算子を使用する必要があるよりはるかに優れています。 –

0

0と宣言しないと結果がランダムになるのは、そのためのC++とcがデータを初期化しないためです。変数を宣言した場合(totalなど)、初期値はメモリ内のその場所にあるものであれば何でも構いません。それは本当に何でもできる。常に変数の値を初期化します。

あなたが意味のあるものを返さない理由は、間違った使い方を使用しているためです。 std :: string :: findはブール値を返しません。したがって、「文字列がこの文字列に存在しません」という文字列の位置に対して、チェックしたいと考えています。これはstd :: string :: nposです。だから、あなたがしたいでしょう:交互

if(word.find('a') != string::npos || word.find('A') != string::npos){ 
     total += 1; 
    } 
+0

'npos'が0または1でない場合、word.find(i)== 'a'!= string :: npos'は常にtrueになります。'npos'はゼロでないので、' total'は常にインクリメントされます。 –

+0

ええ、そうです。私はword.find( 'a')!= string :: nposを意味しました。とにかく文字を繰り返し処理しようとしていたようだ。 – Ben

+0

テキストが "bbbbba"の場合、 'a'は文字列の最後にあるので、' find'の各呼び出しは常に成功するため、結果は6になります。 'i'の現在の位置/インデックスで文字をチェックしたいだけです。 –

関連する問題