Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [C++] Вычеркнуть из трёх слов одинаковые символы  (Прочитано 7729 раз)
0 Пользователей и 1 Гость смотрят эту тему.
555irina
Интересующийся

ru
Offline Offline

« : 05-01-2010 17:07 » 

Задание: "вычеркнуть из трёх слов одинаковые символы."
Помогите, пожалуйста, разобраться с задачей? Я вот сама попробовала, но у меня не получилось... Жаль Жаль Жаль
У меня почему-то только удаляется 2й символ в 1 слове ...
Вот код-

Код:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>

void main()
{
  int i,j,k;
  char a[10],b[10],c[10];

  printf ("Vvedi slovo :\n");
  scanf ("%s",&a);
  scanf(" %s",&b);
  scanf("%s",&c);
  int l1=strlen(a);
  int l2=strlen(b);
  int l3=strlen(c);


  for (int i = 0; i < l1; i++) ;
  for (int j = 0; j < l2; j++);
  for (int k = 0; k < l3; k++);

  {
    if(a[l1] == b[l2] && b[l2] == c[l3])
      a[i]=' ';
  }

  printf("%s ",a);
  printf("%s ",b);
  printf("%s ",c);

  getch ();
}
« Последнее редактирование: 06-01-2010 16:03 от Sel » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 05-01-2010 17:34 » 

Немного переформатировал код, чтобы сразу была видна полная его несуразность.

555irina, расскажи нам построчно, что ты в этот код вложила, какой смысл.
« Последнее редактирование: 06-01-2010 16:01 от Sel » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 08-01-2010 02:22 » 

У меня почему-то только удаляется 2й символ в 1 слове ...
Улыбаюсь Это потому, что написала только
Код:
      a[i]=' ';
а не
Код:
      a[i]=' ';
      b[i]=' ';
      c[i]=' ';

__________________________________________________

Код:
    if(a[l1] == b[l2] && b[l2] == c[l3])
Так ты разве что последний символ проверишь. А тебе все нужны.

Код:
      a[i]=' ';
Чему в этом месте i равно? Это даст не очень хороший результат при l1 = 10.

__________________________________________________

Проходи строку a:
- берешь 1й символ;
- проходишь строку b: если совпадение найдено - выходишь с цикла;
- аналогично со строкой c;
- если даный символ будет найден в b и c, то будет так: (j < l2), (k < l3); замени тогда символ во всех строках на пробел;
- берешь 2й символ;
и так до конца.
Собственно, весь алгоритм поиска. Теперь это переведи в код.
« Последнее редактирование: 08-01-2010 02:31 от Inkognito » Записан
555irina
Интересующийся

ru
Offline Offline

« Ответ #3 : 09-01-2010 11:42 » 

я поняла старый код весь в ошибках,у меня сейчас такая проблема-сам код работает правильно! но только он удаляет В ДАННЫХ ТРЁХ СЛОВАХ по одному одинаковому символу в каждом слове,а надо чтобы все одинаковые (например,если вводим-1)qwwtttefd 2)wwtttqh 3)tttwwoqzx, то должно вывести 1)efd 2)h 3)ozx
и символы вводить только с клавиатуры )
помогите пожалуйста разобраться с этой проблемой?

вот новый код -
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
void main()
{
char a[10],b[10],c[10];
int i,j;
printf ("Vvedite 3 slova :\n");
scanf ("%s",&a);
scanf(" %s",&b);
scanf("%s",&c);
i=strlen(a);
if (strlen(b)>i) i=strlen(b);
if (strlen(c)>i) i=strlen(c);
for (j=0;j<i;j++)
{
if(a[j]==b[j]&&b[j]==c[j])
  {   a[j]=' ';
      b[j]=' ';
      c[j]=' ';
  }
}
printf("%s ",a);
printf("%s ",b);
printf("%s ",c);
getch();
}
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 09-01-2010 20:57 » new

сам код работает правильно!
Код просто работает, но не правильно и опасно. К примеру:
Код:
char a[10],b[10],c[10];
...
scanf ("%s",&a);
scanf(" %s",&b);
scanf("%s",&c);
Главный минус такой записи (это я как-то пропустил в своем первом посте) - если ты напишешь строку в 100 символов, scanf все эти 100 символов "запишет в переменную-строку" a, b или с. В кавычках, потому что 90 из этих символов вылезут на другие данные программы, так как менять размер статических массивов невозможно (а именно такими и являются a, b, c). Лично мне и 11-ти хватило, чтоб программу выбило.

Код:
i=strlen(a);
if (strlen(b)>i) i=strlen(b);
if (strlen(c)>i) i=strlen(c);
Вовсе не правильно. Например, есть a="qwer", b="qwerqwer"; длинна a - 4, b - 8; что ты собираешся найти в таком случае по a[5], a[6], a[7]?
Даже если программа будет работать, всё-равно это плохой тон.

я поняла старый код весь в ошибках,у меня сейчас такая проблема-сам код работает правильно! но только он удаляет В ДАННЫХ ТРЁХ СЛОВАХ по одному одинаковому символу в каждом слове,а надо чтобы все одинаковые (например,если вводим-1)qwwtttefd 2)wwtttqh 3)tttwwoqzx, то должно вывести 1)efd 2)h 3)ozx
Код:
for (j=0;j<i;j++)
{
if(a[j]==b[j]&&b[j]==c[j])
  {   a[j]=' ';
      b[j]=' ';
      c[j]=' ';
  }
}
Таким способом ты удалиш символы только тогда, когда у них будит одинаковый индекс j. И в этом главная проблема твоей программы.

P.S. Код после первого раза ты почти не поменяла.
P.S.S. Разберись с моим алгоритмом.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines