patterncppModerate
Count the number of occurrences of a word
Viewed 0 times
thenumberoccurrenceswordcount
Problem
I was selected for the third round of MS internships for third years. We were surprisingly asked a very easy question: “Make a program that counts the number of times the WORD "a" or "A" occurs”. I wrote the code below and was rejected from attending the final interview.
What is wrong with my code? Please tell me how to improve it. People who used
Is
What is wrong with my code? Please tell me how to improve it. People who used
Char[] instead of string and those who didn't check for first and last words to be "A" were all selected. The condition for commas before and after 'a' was also ignored. What is the error? Is
str.at(i) not good enough...? I know even if we use str[i] it is interpreted as str.operator[](i), so I'm preventing the overhead conversion, right?#include
#include
#include
using namespace std;
int main()
{
string str;
getline(cin,str);
int i;
int count=0;
int l=str.length();
for(i=1;i<l-1;i++)
{
if(toupper(str.at(i))=='A')
if(str.at(i-1)==' ' && str.at(i+1)==' ')
count++;
}
if(toupper(str.at(0))=='A' && str.at(1)==' ')
count++;
if(toupper(str.at(l-1))=='A' && str.at(l-2)==' ')
count++;
cout<<"Count is "<<count<<endl;
return 0;
}Solution
First of all, these interview questions are often a trick. It doesn't really matter if your code works for all cases (everybody makes mistakes). What does matter is how you write the code.
Even if they ask specifically for 'a' or 'A', you are not supposed to hardcode these values. They are a parameter. Understanding what is the input to your program is always the first task. If they ask you "Make a program that counts the number of times the letter 'a' occurs in 'Example'", the correct answer won't be
Second - words are not usually delimited only by a space. You should consider all whitespace and punctuation characters. Or just declare a function
Third - your code is not easily readable. An
Summary:
Even on a very simple program, they can see how much experienced you are. Good developer won't just write something that works. He has to think how the problem will evolve in the future (different parameters), how the program will be maintained (write readable code). Good developers also write programs from top to bottom - first define the structure using high level functions, then write the implementation of the functions.
Even if they ask specifically for 'a' or 'A', you are not supposed to hardcode these values. They are a parameter. Understanding what is the input to your program is always the first task. If they ask you "Make a program that counts the number of times the letter 'a' occurs in 'Example'", the correct answer won't be
return 1;. They also ask for words, you shouldn't assume that the program should search only for words withs 1 letter.Second - words are not usually delimited only by a space. You should consider all whitespace and punctuation characters. Or just declare a function
isWordDelimiter(char) and don't implement it.Third - your code is not easily readable. An
if inside another if in a for? Use functions. Example (pseudocode - I am not C++ programmer and I forgot STL):while ((word = getNextWord(input)) != NULL) {
if (word is in set of searched words) { //replace this with STL set
count++
}
}Summary:
Even on a very simple program, they can see how much experienced you are. Good developer won't just write something that works. He has to think how the problem will evolve in the future (different parameters), how the program will be maintained (write readable code). Good developers also write programs from top to bottom - first define the structure using high level functions, then write the implementation of the functions.
Code Snippets
while ((word = getNextWord(input)) != NULL) {
if (word is in set of searched words) { //replace this with STL set
count++
}
}Context
StackExchange Code Review Q#14711, answer score: 11
Revisions (0)
No revisions yet.