Модераторы: Daevaorn
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> HEEEEELP ! HEEEEELP ! 
:(
    Опции темы
n00dless
  Дата 15.9.2004, 19:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











#include <help_me.h> qstn.gif
респект ;
люди, я только начинаю кодить на C++, посему прошу не кричать, что я задаю идиотские вопросы smile.gif
вопрос:
допустим, пользователь вводит строку "ывфывфываважноесловоыфаф".
каким образом мне сделать проверку на наличие в строке подстроки "важноеслово" ?
пытался работа с классами cstring и sstring, но там все очень мутно и непонятно. sad.gif
падскажите пжалста, если можно ввиде исходника, желательно, используя стандартные операторы smile.gif
здесь бываю редко, если не трудно, ответте по e-mail плиzzz: [email protected]
заранее признателен, n00dless wink.gif

  Вверх
Дрон
Дата 15.9.2004, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(n00dless @ 15.9.2004, 20:41)
что я задаю идиотские вопросы

Вопрос-то может и не глупый, но правила форума ты нарушаешь.

1) Заголовок сообщения должен кратко отражать суть проблемы, нельзя давать заголовки типа "Помогите", "Срочно нужна помощь", "Есть вопрос", "Очень надо", "Сложный вопрос по программированию" и тому подобное.


--------------------
Да. Именно так.
PM   Вверх
Pakshin A. S.
  Дата 15.9.2004, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Класс string содержит несколько функций-членов, предназначенных для поиска подстрок, в частности функции find() и rfind().
Код

size_type find(const string &strob, size_type start=0) const;
size_type rfind(const string &strob, size_type start=npos) const;

Пример:
Код

#include <string>

...

string s = 'asdf';
int i;

i = s.find('as');
if (i != string::npos)
{
// find
}


Это сообщение отредактировал(а) Pakshin A. S. - 15.9.2004, 22:46
PM   Вверх
Coocky
Дата 15.9.2004, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Исходник не дам(сам сделай, иначе не научишься программировать wink.gif )
Итак получай алгоритм:
Подсчитай количество букв в слове[ b]важноеслово[/b] Это будет критерием проверки на совпадение.Затем проверяй (в цикле ) каждую букву,из веденной пользователем,с буквой своего
слова.Если совпало продолжай цикл,плюсуя заранее подготовленую переменную.И когда значение переменой совпадет с количеством букв слова важноеслово ,выходи из цикла.Такое слово есть.Не забывай при не совпадении сбрасывать переменую на ноль.Иди дальше.Если в конце цикла переменная меньше кол-ва букв,такого слова нет.
Ну уж если не разобрался,напишу код.Помогу и c СString.Но пробуй сам smile.gif
О,пока писал уже код кинули.Но это код CString.А ты просил
Цитата
падскажите пжалста, если можно ввиде исходника, желательно, используя стандартные операторы


Это сообщение отредактировал(а) Coocky - 15.9.2004, 22:55


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Конструктор
Дата 16.9.2004, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

Репутация: нет
Всего: 10



Заголовок
string.h

Прототип
char *strstr(const char *s1, const char *s2);

Описание
Сканирует строку на присутсвие заданной подстроки.
strstr сканирует s1 до первого нахождения строки s2.

Возвращаемые значения
strstr возвращает указатель в строке s1, где начинается s2 . Если s2 не встречается в s1, strstr возвращает NULL.

Копирайт C Runtime Library Reference - BCB6
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 16.9.2004, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Модератор: Название темы должно отражать ее суть!

P.S.
Цитата
Копирайт C Runtime Library Reference - BCB6

strstr есть и в VC++, и в gcc, и в Watcom tounge.gif


--------------------
user posted image
PM MAIL WWW   Вверх
Конструктор
Дата 16.9.2004, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

Репутация: нет
Всего: 10



Цитата(mr @ 16.9.2004, 12:02)
strstr есть и в VC++, и в gcc, и в Watcom


Я подразумевал копирайт на текст, ибо закопипастил его оттуда (справка с BCB6) и немножко перевел smile.gif
PM MAIL WWW ICQ   Вверх
LuckLess
Дата 16.9.2004, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: 1
Всего: 1



Бегать по текчту и сравнивать посимвольно , это слишком напряжно... проще:

Код

struct mytxt{
char text[]={/*сюда пиши подстроку , которую ищеш*/}
}zaza;

char input[];
int i;

input="text";//в котором ты исщеш строку.

i=sizeof(input)-sizeof(zaza)+1
//тут  лежит  сколько подстрок длинни zaza может уместиться в строке длинны input;

for (;i>0;i--){
if (  *((struct mytxt*)&input+i)==zaza) printf("YUPPI") , break;
}


код не проверял , но думаю идея понятна.

Это сообщение отредактировал(а) LuckLess - 16.9.2004, 12:39
PM MAIL   Вверх
Конструктор
Дата 16.9.2004, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

Репутация: нет
Всего: 10



1. char text[]={/*сюда пиши подстроку , которую ищеш*/}
В С нельзя инициализировать члены структур и классов таким образом!

2. char input[];
В С нельзя создавать динамические массивы таким образом. Размер этого массива будет неизвестен!

3. input="text";//в котором ты исщеш строку.
В С нельзя таким образом присваивать строки строковым массивам!

4. код не проверял
Это код не откомпилируется никогда!

5. но думаю идея понятна.
Если честно идея совершенно не понятна, а если я понял правильно, то ИМХО идея не верна!

sorry sad.gif
PM MAIL WWW ICQ   Вверх
LuckLess
Дата 16.9.2004, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: 1
Всего: 1



Цитата
1. char text[]={/*сюда пиши подстроку , которую ищеш*/} В С нельзя инициализировать члены структур и классов таким образом!


ты наверно не допонял. я обЪяснял зачем нужно это поле структуры, вот и вся.



Цитата
3. input="text";//в котором ты исщеш строку. В С нельзя таким образом присваивать строки строковым массивам!

Цитата
2. char input[]; В С нельзя создавать динамические массивы таким образом. Размер этого массива будет неизвестен!


ты наверно не допонял. я обЪяснял зачем нужен этот массив.


Цитата
4. код не проверял Это код не откомпилируется никогда!

ессесно не скомпилится

Цитата
5. но думаю идея понятна. Если честно идея совершенно не понятна, а если я понял правильно, то ИМХО идея не верна!


Ладдно... счаз напишу работающий пример...

PM MAIL   Вверх
mr.DUDA
Дата 16.9.2004, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата(LuckLess @ 16.9.2004, 12:00)
Бегать по текчту и сравнивать посимвольно , это слишком напряжно... проще:

гм... ничего не понял... LuckLess предлагает запихнуть строку в структуру, и "бегая по тексту" сравнивать кусок текста со структурой, где лежит образец строки ?

При сравнении двух структур - что происходит ? В примере - вообще ничего не произойдёт, т.к. не переопределён оператор "==" для класса (структуры). Но, допустим, напишем мы этот самый оператор "==". И как будем сравнивать поле "text" двух структур ? Функцией "strcmp" ? Тогда не понятно, почему не подходит "strstr", который сработает в 10-20 раз быстрей, чем беготня по строке с множественными вызовами "strcmp".

З.Ы. интересно, всё-таки, увидеть работающий пример от LuckLess...


--------------------
user posted image
PM MAIL WWW   Вверх
LuckLess
Дата 16.9.2004, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: 1
Всего: 1



Код

#include <stdio.h>
#include <conio.h>
#include <string.h>


void main(void){
char input[50]={0};
typedef struct txt{
 char ftxt[4];
}zz;
int inpsize=0,rep;

zz ftext;
ftext.ftxt[0]='a';
ftext.ftxt[1]='a';
ftext.ftxt[2]='a';
ftext.ftxt[3]=0;
scanf("%49s",&input);

while(input[inpsize]!=0){
inpsize++;
}

rep=inpsize-sizeof(ftext.ftxt)+2;



for(;rep>0;rep--){
(*(zz*)((&input[0]+rep-1))).ftxt[3]=0;
if ( !strcmp( (*(zz*)((&input[0]+rep-1))).ftxt,ftext.ftxt )    ){printf("YUPPI");break;}
}



_getche();
}



Предлагаеться приводить кусок строки из input , к структуре (чтобы вырвать кусок строки нужной длинны)
а потом сравнивать текстовые поля структур(структуры приведенной из куска текста , и структуры где валяеться текст который ищеш).
Добавлено @ 14:18
mr.DUDA
Да , strstr будет быстрее , забыл про нее чтото.....
Но это удобнее чем алгоритм предложенный Coocky


Это сообщение отредактировал(а) LuckLess - 16.9.2004, 14:15
PM MAIL   Вверх
Конструктор
Дата 16.9.2004, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

Репутация: нет
Всего: 10



Цитата

Затем Деннис и Брайан разработали по-настоящему извращенный диалект
Паскаля, назвав его "A". Когда мы обнаружили, что другие действительно
пытаются писать программы на A, мы быстро добавили еще парочку хитрых
примочек, создав B, BCPL, и, наконец, Си. Мы остановились, добившись
успешной компиляции следующего:

for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);


Прошу пардона если кого расстроил smile.gif
PM MAIL WWW ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.