Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 20:35   #1
Byurrer
Пользователь
 
Регистрация: 15.01.2011
Сообщений: 77
По умолчанию Поиск буквы (или нескольких букв) в слове

Здравствуйте. Как можно осуществить поиск буквы или нескольких букв (рядом стоящих) в слове? Заранее спасибо!
Byurrer вне форума Ответить с цитированием
Старый 08.04.2011, 21:22   #2
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Ну примерно вот так:

Код:
#include<iostream.h>
#include<conio.h>
#include<string.h>

int main()
{
    char str[10];
    int i, n;
    cin >> str;
    n=strlen(str);
    for( i=0; i<=n; i++ )
    {
        if( str[i]=='g')
        cout << "Symbol g found"<< endl;
    }
    getch();
    return 0;
}

Где строчка
Код:
 if( str[i]=='g')
И осуществляет поиск в цикле.
Можно написать и соответствующий символу ASCII код к примеру строки
Код:
if( str[i]==103)
и
Код:
 if( str[i]=='g')
Будут эквивалентны.
Ibanez Wizard вне форума Ответить с цитированием
Старый 08.04.2011, 21:45   #3
Byurrer
Пользователь
 
Регистрация: 15.01.2011
Сообщений: 77
По умолчанию

Ibanez Wizard спасибо, понял!
Byurrer вне форума Ответить с цитированием
Старый 08.04.2011, 21:54   #4
Byurrer
Пользователь
 
Регистрация: 15.01.2011
Сообщений: 77
По умолчанию

А вот если текст большой и записан в AnsiString text то как в нем можно найти слово AnsiString word?
Byurrer вне форума Ответить с цитированием
Старый 08.04.2011, 21:57   #5
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Не за что
Не слышал о таком. Ты наверное про C++ Builder говоришь. Я им не пользовался никогда.
Ibanez Wizard вне форума Ответить с цитированием
Старый 08.04.2011, 22:07   #6
Byurrer
Пользователь
 
Регистрация: 15.01.2011
Сообщений: 77
По умолчанию

Ibanez Wizard да c++ билдер.
Попробовал так:
Код:
void log(AnsiString text)
{char *txt = text.c_str();
FILE * fo = fopen("log.txt","a+");
fprintf(fo,"\n");
fprintf(fo,txt);
fclo

bool is_letter_in_word(AnsiString let, AnsiString word) //если в нужном слове word есть буква let
{bool bf = false;char *lt = let.c_str(),*wr = word.c_str();
    while (*lt && *wr)
    {log("*lt = "+String(*lt)+" *wr = "+String(*wr));
        if(*lt == *wr){bf = true;break;}
    *lt++;*wr++;
    }
return bf;
}

int how_word(char *text,AnsiString word)// сколько в тексте слов word
{int count = 0;AnsiString temp = "";
    while(*text)
    {temp = temp+String(*text);
    log("text = "+String(*text));
        if (temp != "" && is_letter_in_word(temp,word)){}
        else {temp = "";}
        if (temp == word){temp = "";count++;}
    *text++;
    }
return count;
}
how_word(char *text,AnsiString word) вызывается из нескольких функций, то есть хочу организвать поиск слов и их количество в тексте. Вроде бы все в норме, но одно НО, в маленьких текстах (~300 сиволов) все идет хорошо, а вот в больших (>10000) программа немного виснит и ничего не обнаруживает ...
Byurrer вне форума Ответить с цитированием
Старый 08.04.2011, 22:10   #7
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Ничем не могу помочь. Я же говорил не пользовался им никогда. Единственное, есть догадка что тип данных неподходящий.
P.S. Кстати я сейчас как раз на С++ учусь работать со строками и буквально 5 минут назад написал программу поиска количества слов в строчке.

Вот она:

Код:
#include<iostream.h>
#include<conio.h>
#include<string.h>

int main()
{
    char str[50];
    int k=1, n=0, i=0;
    gets(str);
    n=strlen(str);
    for( i=0; i<n; i++ ) if( str[i]== ' ') k++;
    cout << k<<endl;
    getch();
    return 0;
}
Это так - может у тебя или у кого нибудь будут замечания к ней - как грамотнее её оформить.
Ibanez Wizard вне форума Ответить с цитированием
Старый 08.04.2011, 22:33   #8
Byurrer
Пользователь
 
Регистрация: 15.01.2011
Сообщений: 77
По умолчанию

Цитата:
how_word(char *text,AnsiString word) вызывается из нескольких функций, то есть хочу организвать поиск слов и их количество в тексте. Вроде бы все в норме, но одно НО, в маленьких текстах (~300 сиволов) все идет хорошо, а вот в больших (>10000) программа немного виснит и ничего не обнаруживает ...
Проблема оказалась совсем в другом ...
Byurrer вне форума Ответить с цитированием
Старый 08.04.2011, 22:51   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Это так - может у тебя или у кого нибудь будут замечания к ней - как грамотнее её оформить.
тут не хватает перевода строки:
Код:
 for( i=0; i<n; i++ ) if( str[i]== ' ') k++;
и лучше писать
Код:
' ' == str[ i ]
если в строке нет ни одного слова то подсчитает неверно, т.к.:
Код:
int k=1
эта строка:
Код:
 n=strlen(str);
вообще ненужна, в цикле пиши
Код:
for( i=0; str[ i ]; i++ )
тогда подключать string.h не нужно.
переменная i инициализируется нулем 2 раза подряд:
Код:
int k=1, n=0, i=0
//...
for( i=0;
если слова разделены не пробелами а, например, символами табуляции - программа подсчитает неверно. Если между словами будет более 1 пробела - тоже самое.
rrrFer вне форума Ответить с цитированием
Старый 09.04.2011, 00:10   #10
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

поиск букв / слов в строке
char * pc = strstr(str,"q");
if (pc) cout << "yo\n";
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет букв С в последнем слове Obey177 Помощь студентам 7 10.09.2010 16:06
в каждом слове обратить порядок букв Maksik Паскаль, Turbo Pascal, PascalABC.NET 7 20.10.2009 20:24
Си. Вычеркнуть из слова X те буквы, которые встречаются в слове Z. hen Помощь студентам 1 29.04.2009 15:32
Перебор заглавных букв в слове =LeonZone= Общие вопросы Delphi 8 02.11.2007 14:59