Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 17.11.2013
Сообщений: 119
1

Программа должна предложить ввести строку и подстроку, и вывести все вхождения подстроки в строку

16.03.2014, 16:58. Показов 1686. Ответов 6
Метки нет (Все метки)

Прошла лекция на данную тему, я прослушав понял - что я ничего не понял
Вообщем дали такое задание : Программа должна предложить ввести строку и подстроку, и вывести все вхождения подстроки в строку (например, для строки 'максимальный' и подстроки 'ма' ответ: 1, 6)
Как это вообще делается? Очень нужна помощь.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2014, 16:58
Ответы с готовыми решениями:

Ввести строку и подстроку, и вывести позицию первого вхождения подстроки в строку
Ваша программа должна предложить ввести строку и подстроку, и вывести номер символа для первого...

Ввести с экрана строку и подстроку. Найти все вхождения подстроки в строку и удалить их из исходной строки
Ввести с экрана строку и подстроку. Найти все вхождения подстроки в строку и удалить их из...

Введите строку и подстроку. Удвойте все найденные вхождения подстроки в строке. Выведите преобразованную строку
Введите строку и подстроку. Удвойте все найденные вхождения подстроки в строке. Выведите...

Вывести исходную строку а$, заменив в ней все вхождения заданной подстроки x$ на заданную подстроку y$
Вывести исходную строку а$, заменив в ней все вхождения заданной подстроки x$ на заданную подстроку...

6
89 / 78 / 62
Регистрация: 06.03.2014
Сообщений: 230
16.03.2014, 17:20 2
вот, возможно можно как-то по-другому сделать
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var s,s1: string;
k: integer;  
begin
  write('Введите строку: ');
  readln(s);
  write('Введите подстроку: ');
  readln(s1);
  k:=0;
  while (pos(s1,s)<>0) do
  begin
    write(pos(s1,s)+k,', ');
    Delete(s,pos(s1,s),Length(s1));
    k:=k+Length(s1);
  end;
  if (k=0) then write('нет ни одного вхождения');
end.
Добавлено через 6 минут
нашёл ошибку, работает не совсем правильно
1
0 / 0 / 1
Регистрация: 17.11.2013
Сообщений: 119
16.03.2014, 17:37  [ТС] 3
По примеру сошлось, вроде бы верно Ща буду разбираться.
Если кто-то кто читает эту тему увидел ВОЗМОЖНО ошибку, напишите
0
89 / 78 / 62
Регистрация: 06.03.2014
Сообщений: 230
16.03.2014, 17:40 4
Starkjkeee, по примеру сошлось, но она не работает, если к примеру ввести строку 'аааббааа', подстроку 'а', выведет только 1, 6
вот второй вариант
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var s,s1: string;
k,i,j: integer;  
b:boolean;
begin
  write('Введите строку: ');
  readln(s);
  write('Введите подстроку: ');
  readln(s1);
  for i:=1 to Length(s)-Length(s1) do
  begin
    b:=true;
    for j:=1 to Length(s1)do
    begin
      if (s1[j]<>s[i+j-1]) then b:=false;
    end;
    if (b) then 
    begin
      write(i,', ');
      k:=k+1;
    end;
  end;  
  if (k=0) then write('нет ни одного вхождения');
end.
но какая то фигня творится, если ввести строку/подстроку, состоящей из одного символа, получается в программе Length(s)=2, хотя надо 1, может от компилятора зависит, попробуй у себя.
1
0 / 0 / 1
Регистрация: 17.11.2013
Сообщений: 119
16.03.2014, 20:29  [ТС] 5
Хм, ввёл аааббааа, выбило почти верно - "1, 2, 3, 6, 7, "
Но почему то нету 8... Почему только
0
89 / 78 / 62
Регистрация: 06.03.2014
Сообщений: 230
16.03.2014, 21:01 6
Starkjkeee, попробуй вместо этого
Цитата Сообщение от aex Посмотреть сообщение
for i:=1 to Length(s)-Length(s1) do
так
Pascal
1
for i:=1 to Length(s)-Length(s1)+1 do
1
0 / 0 / 1
Регистрация: 17.11.2013
Сообщений: 119
16.03.2014, 21:54  [ТС] 7
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var s,s1: string;
k,i,j: integer;
b:boolean;
begin
  write('Введите строку: ');
  readln(s);
  write('Введите подстроку: ');
  readln(s1);
  for i:=1 to Length(s)-Length(s1)+1 do
 
  begin
    b:=true;
    for j:=1 to Length(s1)do
    begin
      if (s1[j]<>s[i+j-1]) then b:=false;
    end;
    if (b) then
    begin
      write(i,', ');
      k:=k+1;
    end;
  end;
  if (k=0) then write('нет ни одного вхождения');
end.
Вот что вышло в целом, вроде проверил на 20 примерах (примерно) - всё работает
Спасибо огромное!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2014, 21:54

Ввести строку и слово, удалить все вхождения слова и вывести строку
Написал код. Вот условие: &quot;Ввести строку и слово, удалить все вхождения слова и вывести строку.&quot; ...

Ввести строку и слово, удалить все вхождения слова и вывести строку
помогите с лабой! Добавлено через 22 секунды через &lt;stdio.h&gt;

Ввести строку и слово, удалить все вхождения слова и вывести строку
Нужно написать программу только со стандартной библиотекой &lt;stdio.h&gt; Помогите, пожалуйста :3

Ввести строку и слово, удалить все вхождения слова и вывести строку
Доброго времени суток всем ! написал лр2 (Ввести строку и слово, удалить все вхождения слова и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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