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

Ваш аккаунт

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

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

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

Си. Строки и подстроки.

6.0K
21 декабря 2005 года
Lucky_7
13 / / 06.09.2004
Приветствую.
Помогите пожалуйста.
На Си надо:
"Функция находит в строке заданную подстроку и возвращает указатель на неё. С использованием этой функции найти все вхождения подстроки в строке".

Спасибо заранее.
243
21 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Lucky_7
Приветствую.
Помогите пожалуйста.
На Си надо:
"Функция находит в строке заданную подстроку и возвращает указатель на неё. С использованием этой функции найти все вхождения подстроки в строке".

Спасибо заранее.


Либо покажи пожалуйста, что ты сам сделал (хотя бы попытки), либо пожалуйста перемести свою тему в раздел "Студентам".

4
21 декабря 2005 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by Lucky_7
Приветствую.
Помогите пожалуйста.
На Си надо:
"Функция находит в строке заданную подстроку и возвращает указатель на неё. С использованием этой функции найти все вхождения подстроки в строке".

Спасибо заранее.



Подсказка: strstr()

6.0K
21 декабря 2005 года
Lucky_7
13 / / 06.09.2004
Цитата:
Originally posted by pacific_7
Либо покажи пожалуйста, что ты сам сделал (хотя бы попытки), либо пожалуйста перемести свою тему в раздел "Студентам".



Итак. На Builder'e я писал и всё работало. Проблема в том, что:
1. Си за 1 день мне не выучить =)
2. AnsiString в Си нет.

Код:
// находим подстроку, начиная с определённой позиции
int seach_substr(AnsiString str, AnsiString substr, int pos)
{
 int pos_substr = 0;
 for(int i = pos; i <= str.Length()-substr.Length(); i++)
   {
    for(int j = 0; j < substr.Length(); j++)
      {
       if(str[j+i] != substr[j+1])
         {
          pos_substr = 0;
          break;
         }
       else
         {
          pos_substr = i;
         }
      }
    if(pos_substr)
      break;
   }
 return pos_substr;
}
//------------------------------------------------
// поиск подстрок
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString str = Edit1->Text;
 AnsiString substr = Edit2->Text;
 int kolvo = 0;
 int pos = 0;
 for(int i = 1; i < str.Length(); i++)
  {
   pos = seach_substr(str, substr, i);
   if(pos)
     {
      kolvo += 1;
      i += pos;
     }
  }
 int * vhod = new int[kolvo]; //массив содержащий все позиции входа подстроки
 kolvo = 0, pos = 0;
 for(int i = 1; i < str.Length(); i++)
  {
   pos = seach_substr(str, substr, i);
   if(pos)
     {
      vhod[kolvo] = pos;
      kolvo += 1;
      i += pos;
     }
  }
 AnsiString substr_pos = "";
 for(int i = 0; i < kolvo; i++)
   substr_pos += IntToStr(vhod)+"    ";
 Edit3->Text = substr_pos;
// после завершения работы не забываем освобождать память
 delete [] vhod;
}


Если всё ещё актуален вопрос о переносе в "Студентам", то дайте знать.
6.0K
21 декабря 2005 года
Lucky_7
13 / / 06.09.2004
Цитата:
Originally posted by mike
Подсказка: strstr()


char * strstr(const char *s1, const char * s2);

Функция strstr() определяет лишь первое вхождение строки s2 в строку s1, все остальные включения уже не учитываются.
Подскажите, пожалуйста ещё что-нибудь.

406
21 декабря 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Lucky_7
char * strstr(const char *s1, const char * s2);

Функция strstr() определяет лишь первое вхождение строки s2 в строку s1, все остальные включения уже не учитываются.
Подскажите, пожалуйста ещё что-нибудь.



Ну так используй strstr несколько раз. Она те при первом возврате возвращяет указатель на первое совпадение,наращиваеш указатель на один символ и этот указатель вставляй снова в strstr в качестве первого аргумента а второй оставляй прежним то есть искомую строку и далее если есть такие совпадения она те возвратит следующее совпадение и так пока не возвратит NULL.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог