Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова (http://www.tehnari.ru/f41/t30062/)

nick23 10.11.2009 13:34

СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова
 
Дана последовательность символов, состоящая из слов. Удалить слова, которые содержат все повторяющиеся буквы первого слова, с сохранением структуры пробелов. Вывести на экран отредактированный текст или сообщение «Нет», если удаление слов не было.

Я вот тут набросал кое-что, но в конце надо удалять не символы, а слова, не знаю как, помогите кто знает, очень нужно !!!
Заранее благодарен !!!

#include <stdio.h>

main(){
char ch, str1[50], str_full[225], sybmol[10];
int k,i=0,j;
/*Вводим строку, т.е пока не появится переход на новую '\n')*/
while((ch=getchar( )) != '\n') {
str1[i] = ch;
i++;
}
/* заносим в массив всю строку*/
str_full[255] = ch;
putchar(ch);
/*перебираем первое слово и если в нем есть одинаковые буквы создаем массив sybmol с этими буквами*/
for(k=0,k <= strlen(str));
k++;
{
while(k <= (strlen(str)-1)) {
if (str[k] == str[k+1]){
sybmol[10] = str[k];
}
}
}
/* перебираем всю строку и печатаем только те символы, которые не равны повторяющимся символам*/
for(i = 0;i <= strlen(str_full);i++) {
int j = 0;
while(j <= (strlen(sybmol))) {
if (str_full[i] != sybmol[j])
printf(str_full[i]);
j++;
}
}
}


не клонируй посты пожалуйста. модератор

Long Cat 10.11.2009 13:47

В программе очень много ошибок:
Код:

#include <stdio.h>

main()
{
    char ch, str1[50], str_full[225], sybmol[10];
    int k,i=0,j;
    /*Вводим строку, т.е пока не появится переход на новую '\n')*/ // для всего этого есть fscanf("%s",str1)
    while((ch=getchar( )) != '\n')
    {
      str1[i] = ch;
      i++;
    }

      /* заносим в массив всю строку*/
    str_full[255] = ch; // это не запись строки в массив, а присваивание 255 элементу (которого даже в массиве нет), значения переменной ch
    putchar(ch); //а это зачем?
    /*перебираем первое слово и если в нем есть одинаковые буквы создаем  массив sybmol с этими буквами*/
    for(k=0,k <= strlen(str)); // цикл без тела //переменная str не определена
    k++;
    {
      while(k <= (strlen(str)-1))
      {
        if (str[k] == str[k+1])
        {
            sybmol[10] = str[k];
        }
      }
    }
        /* перебираем всю строку и печатаем только те символы, которые не равны повторяющимся символам*/
      for(i = 0;i <= strlen(str_full);i++)
      {
          int j = 0;
          while(j <= (strlen(sybmol)))
          {
              if (str_full[i] != sybmol[j])
              printf(str_full[i]);
              j++;
          }
      }
}

Идея такая:
1)Создаем словарь из букв.
2)Берем второе слово из строки, проверяем, есть ли в нем буквы из словаря. Если буквы есть, слово пропускаем. Букв нет - добавляем слово в выходную строку.
3)Так далее, пока слова в строке не кончаться.

nick23 10.11.2009 14:18

Начинаю только изучать СИ. Не могли бы вы написать свой вариант этой программы, чтобы в дальнейшем синтаксические и алгоритмические ошибки не случались. Буду очень благодарен!!!

Long Cat 10.11.2009 14:22

К сожалению, я довольно занят :-(.
Практикуйтесь, компилируйте. Пишите программу уступом, как у меня.
Задавайте вопросы.
Чтобы внешний вид программы не испортился при публикации на форуме, её нужно заключить в BB код
]CODE[
]/CODE[
Только скобки нужно развернуть.

nick23 17.11.2009 22:24

#include <stdio.h>
#include <conio.h>
main(){
char ch, str[250],str1[25];
int k,i,j,l,n,imin;
/*Вводим строку строку, до тех пора пока не появится конец строки*/
i=1;
while((ch=getchar( )) != '\n')
{
str[i]= ch;
i++;
}
k=i;
/*Выделяем первое слово*/
for(i=1; i<k-1; i++)
{
if(str[i]==' ')
break;
str1[i-1]=str[i];
}
l=i-1; //Длина первого слова
/*Перебираем символы в слове*/


getch();
}

Словарь из букв я получаю, а как перебирать слова и проверять есть ли в них эти буквы?


Часовой пояс GMT +4, время: 09:54.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.