函数不返回我想要的值

function not returning value I want

本文关键字:我想要 返回 函数      更新时间:2023-10-16

我希望能够接受用户输入并为给定的字母分配一个值。我想我把那部分放下来了,现在问题是返回值。

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

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

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

没有构造函数的类型(如 int)将只分配空间并具有未定义的值,通常基于先前使用该位置的任何内容。

word.find不做你认为它所做的事情,它是在word中寻找i

您只想使用word[]

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

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

如果不声明结果为 0,结果是随机的原因是 c++ 和 c 不初始化数据。如果声明一个变量,如 total,则初始值是内存中该位置的任何值。它真的可以是任何东西。始终初始化变量的值。

我认为您没有返回任何有意义的内容的原因是因为您使用了查找错误。 std::string::find 不返回布尔值,如果返回一个位置。因此,您要检查是否针对显示"此字符串中不存在该字符"的字符串位置。那就是 std::string::npos。因此,您将需要:

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