/* Write a program that requests a file description (word)
and a string from the user then states the number of occurances
of the string in the file. (We will search for the word 'the'.)
If the file does not exist, the program should state this 
to the user.*/
 
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;

int main()
{
	//Step01: Declare Memory Locations
	ifstream InFile;
	ofstream OutFile;
	string MyWord; //Location of text to be searched for
	//Step02: Initialize Memory Locations
	InFile.open("C:/Temp/TestData1.txt");/*Location of file 
	to be read*/
	OutFile.open("C:/Temp/Testdata2");
	int Index = 0; //Counter for occurances
	//Step03: Do the Work
	cout << "Please enter text: ";
	cin >> MyWord;
	 
	if (!InFile.is_open())
	{
		cerr << "File does not exist" << endl;
		getch();
		exit(0);
	}
    getline(cin, MyWord);
	{
		string word = MyWord.find("the");
		Index++;
	}
	//Step04: Do the Work
	cout << endl;
	getch();
	return 0;
}

This line, string word = MyWord.find("the"); generates this error:

error C2440: 'initializing' : cannot convert from 'std::basic_string<_Elem,_Traits,_Ax>::size_type' to 'std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
and
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]

Any help? Please point out any other errors, please

Thanks,

MB1

find returns an index, not a string. For example, if the string is "atest" and you search for "test", find would return 1. Then you could do this:

int index = s.find ( "test" );

if ( index != string::npos )
  cout<< s.substr ( index ) <<endl;

And "test" would be printed. Note that while I used int for the index, the proper type is string::size_type:

string::size_type index = s.find ( "test" );

if ( index != string::npos )
  cout<< s.substr ( index ) <<endl;

So my getline() has already returned to string and what I need is to code for the occurances of a word in the string?

This article has been dead for over six months. Start a new discussion instead.