2014-01-16 30 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 N()上面的' 'int main()'而不是使用声明。 – Hosch250

+0

我宁愿认为你使用string.find需要重新思考 –

回答

4

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

类型,而构造,像int只会分配空间,并有undefinedd值,通常根据之前使用该地点的情况而定。

word.find不会做你认为这样做,是在word

寻找i你想只用word[]

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

而且,你可能想要把std::endl末你的cout

+0

例如,当我输入一个单词时,字母a或单词Apple仍然得到0的返回值,当我想将该值增加1 –

+0

这就是不同的问题:) –

+0

什么,或者你的问题是回答? –

8

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

+2

更好的是,使用' tolower(word [i])=='a''而不是'word.find(i)=='a'|| word.find(i)=='A'' – Hosch250

+0

哈哈,我真是无聊。非常感谢你。 –

+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

'word.find(i)=='a'!= string :: npos'如果'npos'不为零或一个,将始终为真。由于'npos'不是零,或者'total'总是递增。 –

+0

是的,你是对的。我的意思是word.find('a')!= string :: npos。看起来他只是试图迭代人物。 – Ben

+0

如果文本是“bbbbba”,结果将是6,因为每个对'find'的调用总是成功,因为'a'在字符串的末尾。你只想在'i'的当前位置/索引处检查字符。 –