#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
char *answer="Test successful!!\n";
char *strng=new char[200];//предложение
char *fnd_word="test";
void check()
{
if((strng=strstr(strng,fnd_word))!=NULL)cout<<answer;
else cout<<"Isn't found.\n";
}
void input()
{
cout<<"Input string\n";
gets(strng);//здесь выдается ошибка
check();
}
void main()
{
char ch;
do
{
cout<<"? ";
input();
}while(true);
getch();
}
(с++)Поиск в строке слова
Я(как мне уже посоветовали-http://forum.codenet.ru/showthread.php?t=39039) использую ф-цию strstr() для поиска первого вхождения слова в строке.
Есть проблема - при втором вводе выдается ошибка.:mad: Никак не пойму в чем дело. Возможно пробема из-за того КАК я считываю строку.:confused:
Листинг:
Код:
Во-вторых,условие надо сразу формулировать точно,в предыдущей теме
в условии было cin>>str1; т.е. без пробелов.
strstr - тут не подойдет,она ищет не слово,а подстроку.
Зачем используешь оператор new? А если используешь,то память кто будет освобождать при помощи delete ?Есть такое правило:если написал
new - не забудь написать delete(Cкотт Майерс).Вот так работает и ошибку не выдает,только работает не корректно - ищет подстроку,а не слово.
Код:
char answer[]="Test successful!!\n";
char strng[200];//предложение
char fnd_word[]="test";
char strng[200];//предложение
char fnd_word[]="test";
А почему бы, действительно, не использовать С++ (STL)? std::string.find(...) например? ;)
Цитата:
Во-первых,зачем ты создал ту же тему опять? Продолжал бы предыдущую. Получается повтор. Придется
Извиняюсь мой косяк.
Цитата:
Вот так работает и ошибку не выдает,только работает не корректно - ищет подстроку,а не слово.
Подскажите как искать слово, в предложениии с пробелами.
Цитата: Lerkin
А почему бы, действительно, не использовать С++ (STL)? std::string.find(...) например? ;)
Yes ! Автор просит решение на С++. Ладно,пусть будет без find(...),примитивно,последовательным перебором .За то на С++.Все эти символьные массивы рекомендуется заменять string( б.Страуструп ) в С++.
Код:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
wcout.imbue(std::locale("Russian_russia.OCP"));
string s1;
wcout<<L"Введите строку с пробелами"<<endl;
getline(cin,s1, '\n');
string word("test");
string::size_type pos = 0,prev_pos = 0;
vector<string> vec;
while((pos = s1.find_first_of(' ',pos))
!= string::npos){
vec.push_back(s1.substr(prev_pos,
pos - prev_pos));
prev_pos = ++pos;
}
vec.push_back(s1.substr(prev_pos,
pos - prev_pos));
for(int i = 0;i<vec.size();++i)
cout<<vec<<' ';
cout<<endl;
int count = 0;
for(int i = 0;i<vec.size();++i){
if(vec == word){
wcout<<L"Искомое слово находится в "<<
i<<L" - й позиции"<<endl;
++count;
}
}
if(count == 0)
wcout<<L"Искомое слово не найдено"<<endl;
return 0;
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
wcout.imbue(std::locale("Russian_russia.OCP"));
string s1;
wcout<<L"Введите строку с пробелами"<<endl;
getline(cin,s1, '\n');
string word("test");
string::size_type pos = 0,prev_pos = 0;
vector<string> vec;
while((pos = s1.find_first_of(' ',pos))
!= string::npos){
vec.push_back(s1.substr(prev_pos,
pos - prev_pos));
prev_pos = ++pos;
}
vec.push_back(s1.substr(prev_pos,
pos - prev_pos));
for(int i = 0;i<vec.size();++i)
cout<<vec<<' ';
cout<<endl;
int count = 0;
for(int i = 0;i<vec.size();++i){
if(vec == word){
wcout<<L"Искомое слово находится в "<<
i<<L" - й позиции"<<endl;
++count;
}
}
if(count == 0)
wcout<<L"Искомое слово не найдено"<<endl;
return 0;
}
Вводим строку.Искомое слово - test.Заполняем вектор словами из введенной строки.Находим.