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

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

Восстановить пароль Регистрация
 
frank63
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
04.11.2013, 00:36     позиции вхождения второй строки в первую #1
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++
C++ Строка: Определите длину введенной строки, и если она кратна 4, то поменяйте местами первую часть строки со второй
Дано три строки,нужно вывести первую,удалив из нее гласные,содержащиеся во второй и удвоив согласные,содержащиеся в третьей C++
Найти количество операций необходимое для того, чтобы получить из второй строки первую C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 329
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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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++ Сравнить первую половину числа со второй

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

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

Текущее время: 16:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru