|
Plz Help Me, I am trying to make a school project which is a search engine that takes input from the user and searches the entered word or sentence within the files available. There's no compile error in the program but the program is not searching correctly the file which has the data. If the entered string matches any sentence or string in the file stored then it should display the result.
But the problem is that the strcmp or stricmp or any function which searches for a match is not working.
I am using it with if & else statement for now... If the string is in the file then it should show found else not found but it only works if there is only one word in the file. If the file which is to be searched has lots of data off course in the text format it always shows not found but if it has only one word then it says found. Plz help Me If You Can.
Also plz tell me how can i do the same thing which is to search for a particular entered word in more than one file like for example 10-20 files and then after searching it should display the whole line in the file or (files) found. Thanks For Your Help In Advance. I appreciate it !
Here's the code for searching the word in one file.
Plz also tell me how to search for the entered word in multiple files.
void search()
{
char str2[100];
char str[100];
cout<<"write some text to search:";
gets(str);
ifstream i;
i.open("stud.txt");
while(!i.eof())
{
i>>str2;
if(stricmp(str,str2)==0)
cout<<"found !";
else
cout<<"not found !";
}
getch();
}
|
|
|
|
|
Edit your post and add what (the code) you have tried.
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
|
|
|
|
|
Thanks For Your help in the previous question bro but it didn't worked. I already put the comparison into the while loop as you said but it's still searching for the last word. I am stuck at this point bro i don't know what to do. I also have to move to other parts of the program and complete it but i am stuck at this major point.
|
|
|
|
|
How about having a boolean variable, something like..
bool FoundIt = false;
.
.
.
while(!i.eof())
{
i>>str2;
if(stricmp(str,str2)==0)
{
FoundIt = true;
break;
}
}
if (FoundIt)
cout<<"found ! \n";
else
cout<<"not found ! \n";
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
modified 4-Dec-18 13:57pm.
|
|
|
|
|
I suspect that the problem is that you are using i>>str2; where str2 is defined as a character array. If you add a print command after that line you can see exactly what is returned by the >> operator. You should use a string type to get each word. Alternatively use ordinary C library functions to read each line and tokenise into words.
|
|
|
|
|
Thanks for taking time to reply to me bro.
Now, I would if i could what you told me but the problem is that i HAVE to make this project in Turbo C++ only and i know that this is ancient and i will go to hell for using it but plz try to help me with this project with the turbo Compiler
|
|
|
|
|
It makes little difference which compiler you use. You still need to list out the strings you are reading from the file to see whether they match with the one you have typed in.
|
|
|
|
|
You need to do the same thing for each file. This means breaking up your function into multiple functions. Hint: the new function would start at ifstream.
|
|
|
|
|
|
Think about the difference of using cout inside the loop and after the loop.
|
|
|
|
|
Hack Baba wrote: Plz also tell me how to search for the entered word in multiple files. Take your code from the ifstream declaration down and move to a separate function. Create a loop that iterates each filename you wish to process, calling the aforementioned function with each filename.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Hi
I have CBS_SIMPLE CBS_OWNERDRAWVARIABLE ComboBox that I populate via DrawItem using DrawText
everything works fine in debug mode and for that matter in release mode while under the Visual Studio Debugger
However When I run code in Release not under the debugger the list box entries appear for a instant and then disappear
Any Suggestion how to go about debugging would be appreciated
|
|
|
|
|
Your code is relying on a local variable value to start zero and it won't be in release (they start unset usually just junk whatever was on the stack beforehand when it gets allocated) but in debug it zeros all local variables. It is one of the core differences between debug and release mode.
Usually its something like a bool flag that is assumed to start false (0) which won't in release mode as any non zero value means true.
Just check which local variable(s) you are assuming starts as zero and set the thing to zero manually
/* this will behave the same as someGoodFunc in debug but not in release */
void someWrongFunc (void)
{
bool IamaBadBool;
}
void someGoodFunc (void)
{
bool IamGoodBool = 0;
}
In vino veritas
modified 3-Dec-18 23:50pm.
|
|
|
|
|
the only thing I can come with first is this piece of code
I only display part of the string in the list box
void Casidcombo::DrawItem(LPDRAWITEMSTRUCT pdi)
{
ASSERT(pdi->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText = (LPCTSTR)pdi->itemData;
ASSERT(lpszText == NULL);
CDC dc;
CWnd* phwnd = CWnd::FromHandle(pdi->hwndItem);
dc.Attach(pdi->hDC);
CString str(lpszText,8);
and later write it out
dc.DrawText(
str,
(int)_tcslen(str),
&pdi->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
However str is on the stack and would disappear after exiting draw item ?
I'll try it out
|
|
|
|
|
Str is on the stack and will go bye bye as soon as you leave the function.
In vino veritas
|
|
|
|
|
ForNow wrote:
dc.Attach(pdi->hDC);
CString str(lpszText,8);
and later write it out
dc.DrawText(
str,
(int)_tcslen(str),
BTW, if you are using CString then you have to use CString::GetLength(), not the C-runtime _tcslen(str).
|
|
|
|
|
|
|
Unhandled exception at 0x01F523BC (mfc140d.dll) in MProSet.exe: 0xC0000005: Access violation reading location 0xCDCDCDD1.
|
|
|
|
|
Your program is trying to access invalid memory. You should post the relevant code for further help.
|
|
|
|
|
You are likely trying to use an uninitialised pointer.
|
|
|
|
|
|
Is there any way of accessing the SMS System via the Internet. It runs as far as I understand over the same Physical Layer, with probably a different protocol.
Regards,
Bram
Bram van Kampen
|
|
|
|
|
There are websites that provide SMS services, although most require payment.
|
|
|
|
|
Well Richard,
That was not really my question. The Internet uses HTTP and TCP/IP protocols, the Mobile Phone service runs over the same physical network, but, with a different protocol. What is this different Protocol! Where is the Spec for it!
Regards,
Bram.
Bram van Kampen
|
|
|
|