功能没有返回我想要的值

时间:2014-01-16 02:40:05

标签: c++

我希望能够获取用户输入并为给定的字母赋值。我想我已经把那部分放下了,现在问题就是返回价值。

#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 ....等随机数。

3 个答案:

答案 0 :(得分:8)

我认为word.find(i)可能不是你想要的。要访问字符串中的特定字符,请使用方括号,即:word[i]而不是word.find(i)

答案 1 :(得分:4)

如果你没有初始化它(设置它的值),使用它是未定义的行为并且可以返回任何随机值 - 包括0

没有构造函数的类型,如int,只会分配空间并具有未定义的值,通常基于之前使用过的位置。

word.find没有按照您的想法执行,它正在i中搜索word

您只想使用word[]

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

此外,您可能希望将std::endl放在cout行的末尾

答案 2 :(得分:0)

如果你没有将结果声明为0,你的结果是随机的原因是因为c ++,而c就此而言,不要初始化数据。如果你声明一个变量,比如total,那么初始值就是在内存中那个地方发生的事情。它真的可以是任何东西。始终初始化变量的值。

我认为你没有返回任何有意义的原因是因为你使用了发现错误。如果返回一个位置,std :: string :: find不返回布尔值。因此,您需要检查字符串位置是否显示“此字符串中不存在该字符”。那是std :: string :: npos。所以,你会想要:

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