Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
frank63
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
#1

позиции вхождения второй строки в первую - C++

04.11.2013, 00:36. Просмотров 560. Ответов 9
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
   char str[100];
   char substr[50];
   int i;
   printf("Vvedi stroku:"); gets(str);
   printf("Vvedi podstroku:"); gets(substr);   
   char* p;
   p=strstr(str, substr);
   printf("Pozicii vhozhdeniya: %s\n", p);
   i=0;
   while (p=strstr(p,substr)) 
   {
      i++; p++;
   }
   printf("Vsego Vhozhdenii: %d\n", i); 
 
    _getch();
 
    return 0;
}
Необходимо чтобы программа распечатывала позиции вхождения второй строки в первую и их общее количество. У меня программа считает вхождением только 2 одинаковых строки и не определяет позиции вхождения. Подскажите, пожалуйста, как это можно исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 00:36     позиции вхождения второй строки в первую
Посмотрите здесь:
Выполнить вставку второй строки в первую с заданной позиции C++
C++ Строка: Определите длину введенной строки, и если она кратна 4, то поменяйте местами первую часть строки со второй
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции, с которой вторая строка содержится в первой. C++
Второе слово второй строки нужно скопировать в первую строку C++
Поменять строки местами по правилу: первую - со второй, третью - с четвертой и т.д. C++
Приписать второе слово второй строки к первой, развернуть первую строку C++
Найти количество операций необходимое для того, чтобы получить из второй строки первую C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 331
04.11.2013, 04:48     позиции вхождения второй строки в первую #2
C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char* argv[]) {
  char str[100], substr[50];
  printf("Vvedi stroku:"); gets(str);
  printf("Vvedi podstroku:"); gets(substr);   
  char* p;
  // c - счетчик вхождений.
  // i - индекс символа, начиная с которого ищем подстроку.
  for (int c = 1, i = 0; i < 100 && (p = strstr(&str[i], substr)); i++)
    printf("Poziciya vhozhdeniya #%d: %d\n", c++, i = p - str);
  _getch();
  return 0;}
frank63
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
04.11.2013, 12:17  [ТС]     позиции вхождения второй строки в первую #3
Цитата Сообщение от mytilus Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char* argv[]) {
  char str[100], substr[50];
  printf("Vvedi stroku:"); gets(str);
  printf("Vvedi podstroku:"); gets(substr);   
  char* p;
  // c - счетчик вхождений.
  // i - индекс символа, начиная с которого ищем подстроку.
  for (int c = 1, i = 0; i < 100 && (p = strstr(&str[i], substr)); i++)
    printf("Poziciya vhozhdeniya #%d: %d\n", c++, i = p - str);
  _getch();
  return 0;}
Что-то не работает. Ввожу 1ую строку, 2ую строку. Программа результат не выводит.
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
04.11.2013, 13:00     позиции вхождения второй строки в первую #4
как вариант:
C
1
2
3
4
5
6
7
size_t const substrLength = strlen(substr);
size_t inclusionCount = 0;
for (char * pos = strstr(str, substr); pos; pos = strstr(pos + substrLength, substr)) {
   printf("%zu inclusion at %tu\n", ++inclusionCount, pos - str);
}
printf("%zu inclusion(s) totally\n", inclusionCount);
fflush(stdout);
frank63
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
04.11.2013, 13:58  [ТС]     позиции вхождения второй строки в первую #5
Цитата Сообщение от gray_fox Посмотреть сообщение
как вариант:
C
1
2
3
4
5
6
7
size_t const substrLength = strlen(substr);
size_t inclusionCount = 0;
for (char * pos = strstr(str, substr); pos; pos = strstr(pos + substrLength, substr)) {
   printf("%zu inclusion at %tu\n", ++inclusionCount, pos - str);
}
printf("%zu inclusion(s) totally\n", inclusionCount);
fflush(stdout);
Можно ли это релизовать на основе моего кода?
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
04.11.2013, 14:10     позиции вхождения второй строки в первую #6
Можно, просто вставь в нужное место) например: http://ideone.com/4IExM0
frank63
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
05.11.2013, 18:51  [ТС]     позиции вхождения второй строки в первую #7
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно, просто вставь в нужное место) например: http://ideone.com/4IExM0
Ссылка нерабочая(
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
06.11.2013, 01:54     позиции вхождения второй строки в первую #8
Цитата Сообщение от frank63 Посмотреть сообщение
Ссылка нерабочая(
Поправил.
frank63
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
06.11.2013, 19:19  [ТС]     позиции вхождения второй строки в первую #9
Цитата Сообщение от gray_fox Посмотреть сообщение
Поправил.
Спасибо за уточнение. Программа у меня компилируется, ввожу первую строку, вторую. Выводятся сообщения
zu inclusion at tu
zu inclusion(s) totally
То есть результат не выводится. Подскажите, пожалуйста, как это можно исправить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 23:37     позиции вхождения второй строки в первую
Еще ссылки по теме:
Дано три строки,нужно вывести первую,удалив из нее гласные,содержащиеся во второй и удвоив согласные,содержащиеся в третьей C++
C++ Заменить все вхождения первого символа в массив на второй символ
C++ Сравнить первую половину числа со второй
C++ Поменять местами первую половину массива со второй
C++ Рекурсия: скопировать первую строку в конец второй

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
06.11.2013, 23:37     позиции вхождения второй строки в первую #10
Цитата Сообщение от frank63 Посмотреть сообщение
То есть результат не выводится. Подскажите, пожалуйста, как это можно исправить?
Можно заменить %zu и %tu на %u в printf.
Yandex
Объявления
06.11.2013, 23:37     позиции вхождения второй строки в первую
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru