元素计数问题

时间:2017-02-20 17:48:25

标签: c++ string

#include <iostream>
using namespace std;

int countLetters(char text[], char letter);

int main()
{
    char letter;
    cout << "Enter a letter: ";
    cin >> letter;
    cin.ignore();
    char text[1024];
    cout << "Enter text: ";
    cin.getline(text, 1024);
    int letterCount = countLetters(text, letter);
    cout << "Number of '" << letter << "'s: " << letterCount << endl;

    return 0;
}

int countLetters(char text[], char letter)
{
    int letterCount = 0;

    for (int i = 0; i <= text[i]; i++)
    {
        if (letter == text[i])
        letterCount++;
    }

    return letterCount;
}

此代码,如编写的那样,旨在向用户询问他们想要在一行文本中搜索的字母。其次,它将要求用户输入他们想要搜索的文本行。最后,它会吐出他们输入的特定文本行中有多少个字母。

我的具体错误在于:当用户在“CS 124 - 软件开发简介”中询问“e”时,程序仅声明有一个'e'。我不确定是什么问题,因为当你运行程序并在要求搜索完全相同的文本行时输入“o”时,你会得到正确数量的'o'值返回,4。 关于我的错误是什么以及搜索'e'时为什么会出现故障的任何想法?

2 个答案:

答案 0 :(得分:2)

您的for条件有误,for循环应该继续,i小于text的长度而不是text[i]的值。由于这是C ++,你应该使用string而不是字符数组,为什么要让自己更难?

下面的代码是一种C ++方法,请注意我的C ++有点生疏,代码可能包含错误。

#include <iostream>
#include <string>

using namespace std;

int countLetters(string text, char letter);

int main() {
    char letter = ' ';
    string text;

    cout << "Enter a letter: ";
    cin >> letter;
    cin.ignore();

    cout << "Enter text: ";
    getline(cin, text); // use 'getline(cin, text)' instead of 'cin >> text'

    int letterCount = countLetters(text, letter);
    cout << "Number of '" << letter << "'s: " << letterCount << endl;

    return 0;
}

int countLetters(string text, char letter) {
    int letterCount = 0;

    for (int i = 0; i < text.size(); i++) {
        if (letter == text[i]) {
            letterCount += 1;
        }
    }

    return letterCount;
}

答案 1 :(得分:0)

更改条件

i <= text[i]

text[i] != '\0'