在C ++中查找非空白字符

时间:2017-05-06 19:06:48

标签: c++

对于我的作业,我必须调用一个函数来获取用户输入并吐出非空白字符的数量。在程序内部,我有这段代码:

int GetNumOfNonWSCharacters(const string givenText) {
    int counter;
    for (int i = 0; i < givenText.length(); i++) {
        if (givenText.at(i) != ' ') {
            counter++;
        }
    }
    return counter; 
}

当我返回计数器整数时,这是我输出字符串 sampleText 作为输入的方式:

if (menuInput == 'c' || menuInput == 'C') {
    cout << "Number of whitespaces: " << GetNumOfNonWSCharacters(sampleText) << endl;
}

它返回一个像 1231341235 这样的答案。现在,当我将此代码键入不同的文件时,非常确定它是相同的,我每次都得到正确的结果:

int NumNonWhitespaces(const string userInput) {
    int counter;
    for (int i = 0; i < userInput.length(); i++) {
        if (userInput.at(i) != ' ') {
            counter++;
        }
    }
    return counter;
}

int main() {
    string userString;
    cout << "Enter some text" << endl;
    getline(cin, userString);
    cout << "You entered: " << userString << endl;
    cout << NumNonWhitespaces(userString);
    return 0;
}

有没有人能解决这个问题?

4 个答案:

答案 0 :(得分:2)

使用STL count算法计算非空格数的方法更为简单:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
    string userString;
    cout << "Enter some text" << endl;
    getline(cin, userString);
    cout << "You entered: " << userString << endl;

    //count the number of white spaces
    int numberOfWhiteSpace = count(userString.begin(), userString.end(), ' ');

    //substruct that number from the total length of your string
    cout << "number of non-whitespace: " << userString.length() - numberOfWhiteSpace;

    return 0;
}

但是在您的解决方案中,您必须将变量counter初始化为0

答案 1 :(得分:1)

如果你先使用counter而没有初始化它,那么在你的程序开始使用它之前你会得到它的内存地址中存在的任何垃圾内存(当你声明一个变量时,C ++不会自动将内存清零) 。将它复制到新文件时它的工作原理纯属巧合。

修复只是在使用它之前将counter初始化为0:

int counter = 0;

答案 2 :(得分:0)

您必须初始化计数器变量,否则它将包含任何旧值。

int counter=0;

答案 3 :(得分:0)

在某些编程语言中,如果分配了一个变量但未分配变量,则称其具有&#34;垃圾值&#34;也就是说,某些信息被随机存放在计算机的内存中。因此,将计数器变量初始化为0