user1035927
user1035927

Reputation: 1753

Differentiate between same strings with different punctuation in C++

I am writing a C++ program to count the frequency of a word occurring in a text file. I am using the isalpha function to separate the words, but isalpha does not differentiate between same strings having different punctuation.

For example: "I own a company. In my company, there are 200 employees. I love my company." In the above sentence it gives count of company as 3 How do I make it to differentiate the count like:

company 1
company, 1
company. 1

The loop which does the counting:

while(!isalpha(c) && !in.eof())
{
    c = in.get();
}

while(isalpha(c))
{
    out.push_back(tolower(c));
    c = in.get();
}

where 'out' is a string, 'in' is an istream value and c is a char.

[EDIT] Got Solution

while(!isalpha(c) && !ispunct(c) !in.eof())
{
    c = in.get();
}

while(isalpha(c) || ispunct(c))
{
    out.push_back(tolower(c));
    c = in.get();
}

Upvotes: 1

Views: 267

Answers (1)

Loki Astari
Loki Astari

Reputation: 264471

I thought your way was better (I would expect company to have a count of 3).

But if you want to separate words and punctuation is significant, then use isspace() as a separator.

Note: The standard stream >> operator already does this for you.

std::string  word;
in >> word;
std::transform(word.begin(), word.end(), word.begin(), ::tolower);

Upvotes: 2

Related Questions