我希望能够获取用户输入并为给定的字母赋值。我想我已经把那部分放下了,现在问题就是返回价值。
#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 :(得分: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;
}