954,492 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

need to find occurances in a string

/* 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,
_Ax=std::allocator
]
and
[
_Elem=char,
_Traits=std::char_traits,
_Ax=std::allocator
]

Any help? Please point out any other errors, please

Thanks,

MB1

mb1
Newbie Poster
7 posts since Mar 2005
Reputation Points: 10
Solved Threads: 0
 

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;
Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

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

mb1
Newbie Poster
7 posts since Mar 2005
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You