0

I am writing a program that can count the number of times a word is found in a external file. The words that are to be searched for are also in an external file but I am able to retrieve those just fine. I realised that it will only update the value of count if the word exactly matches. So for example if I was searching for the word "School" and the word "school" was in the textfile I don't think the value of count would be changed. I also think that count wouldn't be changed if the word to be search for was "SCHOOL" and the word in the textfile was "school". So how do I edit my if statements so that for example the word "school" would match "SCHOOL" AND "School"?

This is my main function:

#include <iostream> #include "ReadWords.h" #include "Writer.h" #include <cctype> #include <string> using namespace std; int main() { int x = 9; int count = 0; int count0; int count1; int count2; int count3; int count4; int count5; int count6; int count7; int count8; int count9; int scount; const int size = 10; string word_search[size]; string word; cout << "Please enter a filename: " << flush; char filename[30]; cin >> filename; ReadWords reader(filename); while (reader.isNextWord()){ count = count + 1; reader.getNextWord(); } cout << "There are: " << count << " words in the play" << endl; cout << "Please enter the name of the file with the search words: " << flush; char filename1[30]; cin >> filename1; ReadWords reader1(filename1); scount = 0; while (reader1.isNextWord()) { word_search[scount] = reader1.getNextWord(); ++scount; } cout << "" << endl; while (reader.isNextWord()) { 

This is where I attempted to convert the input to upper case to see if the word matches the uppercase version of itself but this didn't work. Here I also need to check if the word matches itself if the first letter is capital?

 if (reader.getNextWord() == word_search[0] || toupper(reader.getNextWord()) == word_search[0]) { count0 = count0 + 1; } if (reader.getNextWord() == word_search[1]) { count1 = count1 + 1; } if (reader.getNextWord() == word_search[2]) { count2 = count2 + 1; } if (reader.getNextWord() == word_search[3]) { count3 = count3 + 1; } if (reader.getNextWord() == word_search[4]) { count4 = count4 + 1; } if (reader.getNextWord() == word_search[5]) { count5 = count5 + 1; } if (reader.getNextWord() == word_search[6]) { count6 = count6 + 1; } if (reader.getNextWord() == word_search[7]) { count7 = count7 + 1; } if (reader.getNextWord() == word_search[8]) { count8 = count8 + 1; } if (reader.getNextWord() == word_search[9]) { count9 = count9 + 1; } } cout << "Please enter the name of the file to write to: " << flush; char filename2[30]; cin >> filename2; Writer reader2(filename2); cout << "File has been written too.." << endl; reader2.writeInt(count); reader2.writeString("Hello my name is Joshua Ogunnote"); return 0; } 

This is a separate file where some of my functions are declared:

#include "ReadWords.h" #include <cstring> #include <iostream> using namespace std; void ReadWords::close(){ wordfile.close(); } ReadWords::ReadWords(const char *filename) { wordfile.open(filename); if (!wordfile) { cout << "could not open " << filename << endl; exit(1); } } string ReadWords::getNextWord() { string n; if(isNextWord()){ wordfile >> n; int len = n.length(); for(int i = 0; i < len ; i++) { if (ispunct(n[i])) { n.erase(i--, 1); len = n.length(); } } cout << n << endl; return n; } } bool ReadWords::isNextWord() { if (wordfile.eof()) { return false; } return true; } 
2
  • Please use a Minimal, Complete, and Verifiable example Commented Nov 15, 2015 at 1:08
  • Whenever you have many variables with the same name but differing only by an id number, this is a hint you should use an array and loop. Commented Nov 15, 2015 at 1:12

1 Answer 1

0

If you're just using English, a simple tolower() transform will do.

std::string tolower( std::string s ) { for (char& c : s) c = std::tolower( c ); return s; } 

Now you can compare them:

if (tolower( "Hello" ) == tolower( "HELLO" )) 

If you are working with Unicode, you should perform a conversion called case folding on the text, and compare the resulting string data.

Sign up to request clarification or add additional context in comments.

1 Comment

yes that would work if i actually had the strings but i am getting my strings from my external file so I don't know how to apply your logic exactly

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.