Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(с++)Поиск в строке слова

21K
04 июня 2007 года
Timmy!!
15 / / 02.06.2007
Задача: Пользователь вводит строку(с пробелами), и в этой строке нужно найти слово.

Я(как мне уже посоветовали-http://forum.codenet.ru/showthread.php?t=39039) использую ф-цию strstr() для поиска первого вхождения слова в строке.

Есть проблема - при втором вводе выдается ошибка.:mad: Никак не пойму в чем дело. Возможно пробема из-за того КАК я считываю строку.:confused:


Листинг:
Код:
#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();
}
320
04 июня 2007 года
m_Valery
1.0K / / 08.01.2007
Во-первых,зачем ты создал ту же тему опять? Продолжал бы предыдущую. Получается повтор. Придется предыдущую удалить ?[COLOR="Red"]Нарушение - 5 за повтор[/COLOR]
Во-вторых,условие надо сразу формулировать точно,в предыдущей теме
в условии было cin>>str1; т.е. без пробелов.
strstr - тут не подойдет,она ищет не слово,а подстроку.
Зачем используешь оператор new? А если используешь,то память кто будет освобождать при помощи delete ?Есть такое правило:если написал
new - не забудь написать delete(Cкотт Майерс).Вот так работает и ошибку не выдает,только работает не корректно - ищет подстроку,а не слово.
 
Код:
char answer[]="Test successful!!\n";
char strng[200];//предложение
char fnd_word[]="test";
9
04 июня 2007 года
Lerkin
3.0K / / 25.03.2003
А почему бы, действительно, не использовать С++ (STL)? std::string.find(...) например? ;)
21K
04 июня 2007 года
Timmy!!
15 / / 02.06.2007
Цитата:
Во-первых,зачем ты создал ту же тему опять? Продолжал бы предыдущую. Получается повтор. Придется


Извиняюсь мой косяк.

Цитата:
Вот так работает и ошибку не выдает,только работает не корректно - ищет подстроку,а не слово.


Подскажите как искать слово, в предложениии с пробелами.

320
04 июня 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: 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;
}

Вводим строку.Искомое слово - test.Заполняем вектор словами из введенной строки.Находим.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог