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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2017, 19:11   #1
Olaa
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 18
Восклицание Подсчитать количество вхождений слова

Не знаю как вывести номера позиций.
Подсчитать количество вхождений слова «мама» в строку и вывести номера первых позиций этих вхождений.

Код:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
#include "string.h"
 
int main()
{
    setlocale (LC_ALL,"RUS");
    int n=0;
    char s[100];
    printf ("Введите строку\n");
    gets(s);
    char *p=s;
    while(*p)
    {
        p=strstr( p, "mama");
        if(p==NULL) break;
        n++;
        p++;
    }
    printf("Номер позиции %d\n", p);
    printf("Количество вхождений = %d\n", n);
    system("pause");
    return 0;
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 24.05.2017 в 09:25.
Olaa вне форума Ответить с цитированием
Старый 23.05.2017, 22:19   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

так?
Код:
while(*p)
{
p=strstr( p, "mama");
if(p==NULL) break;
n++;
printf("Номер позиции %d\n", p);
p++;
}
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.05.2017, 22:47   #3
Olaa
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 18
По умолчанию

не выводит номер позиции
Olaa вне форума Ответить с цитированием
Старый 24.05.2017, 07:28   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
p=strstr( p, "mama");
Вы в цикле каждый раз ищете подстроку, но исходную строку при этом не уменьшаете. Поэтому на каждой итерации цикла программа начинает поиск с начала и находит одну и ту же позицию.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.05.2017, 07:57   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
#include "string.h"

int main()
{

  setlocale (LC_ALL,"RUS");
  char s1[100];
  char s2[4];
  int count = 0;

  printf ("Введите строку\n");
  gets(s1);
  printf ("Введите подстроку\n");
  gets(s2);

  char *p = s1;

  do {

	// Следует учитывать, что после каждого вызова strstr указатель на начало строки 
        // сдвигается на точку первого вхождения подстроки.
        // Пример: s1 = "123mama456mama", изначально p указывает на 1, 
        // после вызова strstr p указывает на первый символ "m" 
        // (строка будет "mama456mama")

        p = strstr(p, s2);

	if (p != NULL){

          // тут инкрементируем счётчик вхождений и выводим на экран номер текущей позиции вхождения
	  count++;  
	  printf("Номер позиции #%d: %d\n", count, p - s1 + 1);

          // А тут уменьшаем строку - сдвигаем указатель на начало строки на длину искомой подстроки.
          // То есть при подстроке "mama" и строке "mama123mama" в этой операции делаем сдвиг указателя 
          // на strlen("mama") = 4 символа. 
          // В итоге p будет указывать на 1 и вся строка в p будет иметь вид: "123mama"

	  p = &p[strlen(s2)];

	}

  } while (p != NULL);

  printf("Количество вхождений = %d\n", count);
  system("pause");
  return 0;

}
Как-то так - универсальный вариант
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 24.05.2017 в 08:16.
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка на количество вхождений цифры 7 Алексей_2012 Помощь студентам 6 20.05.2015 22:28
с++Подсчитать количество вхождений в текст заданного слова archil Помощь студентам 7 02.06.2014 21:23
Подсчитать количество входов слова "мама" Vovchik! Помощь студентам 2 08.04.2013 14:45
Подсчитать количество вхождений в слова первого слова. 07412 Общие вопросы C/C++ 4 27.05.2010 12:05
Подсчитать кол-во вхождений символа Си++ Alexion124 Помощь студентам 9 05.01.2009 00:03