user7938956
user7938956

Reputation:

Finding non-whitespace characters in C++

For my assignment, I have to call a function that takes the user input and spits out the number of non-whitespace characters. Inside the program, I have this code:

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

When I return the counter integer, this is how I output it with the string sampleText being the input:

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

It returns an answer like 1231341235 or something along those lines. Now, when I type this code into a different file, pretty sure it's identical, I get the correct result every time:

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;
}

Does anyone have a solution to the problem ?

Upvotes: 1

Views: 4764

Answers (4)

Delete Me
Delete Me

Reputation: 102

You have to initialise the counter variable otherwise it will contain any old value.

int counter=0;

Upvotes: 0

HDJEMAI
HDJEMAI

Reputation: 9800

There is even more simple way to count the number of non white spaces by using the STL count algorithm:

#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;
}

But in your solution you have to initialize the variable counter to 0

Upvotes: 2

Parthav
Parthav

Reputation: 21

In some programming languages if a variable is allocated but not assigned, it is said to have a "garbage value" , that is, some information that was being held any random piece of the computer's memory. So initialize the counter variable to 0

Upvotes: 0

gsemac
gsemac

Reputation: 852

If you use counter without initializing it first, you'll get whatever junk memory existed at its memory address before your program started using it (C++ does not automatically zero-out the memory when you declare a variable). The fact it works when you copy it into a new file is purely coincidental.

The fix is simply to initialize counter to 0 before using it:

int counter = 0;

Upvotes: 1

Related Questions