Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 14:25   #1
Артем Смирнов
Новичок
Джуниор
 
Регистрация: 15.05.2012
Сообщений: 2
По умолчанию "Работа со строками.(Язык С)"

Здравствуйте! Нужна помощь в выполнении задания. Задание : необходимо так изменить введенную строку, чтобы каждое 3 слово в ней не входило в выходную строку(=удалялось). Все остальные пробелы и слова остаются на своих местах.
Самостоятельно, долго пытался решить задачу но в итоге не получается. После запуска на исполнение (codebloks) итоговая строка(выходная ) не отличается от введенной. Вот мои наработки
Код:
#include <stdio.h>
#include <stdlib.h>

int main() {

char is[200];
char os[200];
printf("Vhodnaja stroka =");
gets(is);
printf("Vhodnaja stroka =%s \n", is);
int i,j,k,slovo,l,s,z;
for(i=-1,k=0;is[i]!=0;i++,k++){

    if(((is[i]==' ') && (is[i+1]!=' '))) {
       for(slovo=0;slovo<4;slovo++){};
         if(slovo==3) {
           s=k;
           for(i=k,z=k;is[i]!=0; i++,z++) {
              if(is[i]==' ') { l=0;
                l=l+z; break;
           }
        }
    }


}
}

for(i=0,j=0;i!=s;i++,j++){
os[j]=is[i];
    }

if (l!=0) {
   for(i=l,j=l;is[i]!=0;i++,j++) {
   os[j]=is[i];
   }
}
os[j]=0;
printf("Vihodnaja stroka =%s \n", os);

}

Наверняка ошибка в фрагменте ниже
Код:
for(i=-1,k=0;is[i]!=0;i++,k++){

    if(((is[i]==' ') && (is[i+1]!=' '))) {
       for(slovo=0;slovo<4;slovo++){};
         if(slovo==3) {
           s=k;
           for(i=k,z=k;is[i]!=0; i++,z++) {
              if(is[i]==' ') { l=0;
                l=l+z; break;
Здесь я просматриваю все символы введенной строки , и если имеется сочетание (пробел)(непробел) то счетчик "слово" увеличиваю на 1. Если слово становится равным трем, то значит что я нашел начало удаляемого слова "s" , а потом ищу его конец(если он существует) ( первый пробел)- "l".

В фрагменте ниже присваиваю элементы входной строки посимвольно элементам выходной, до "s" , то есть до начала третьего (удаляемого слова), а потом с конца (если есть) третьего (удаляемого слова) слова до конца входной строки.

Код:
for(i=0,j=0;i!=s;i++,j++){
os[j]=is[i];
    }

if (l!=0) {
   for(i=l,j=l;is[i]!=0;i++,j++) {
   os[j]=is[i];
   }
}
os[j]=0;
И как писал выше обе строки одинаковы, слово не удаляется, Помогите пожалуйста!!!!!. Заранее огромное спасибо!
Артем Смирнов вне форума Ответить с цитированием
Старый 15.05.2012, 18:22   #2
Артем Смирнов
Новичок
Джуниор
 
Регистрация: 15.05.2012
Сообщений: 2
По умолчанию

Кое - что доделал, Заменил эти два последних фрагмента на
Код:
do {
 i=0;k=1;slovo=0;
 i=i+1; k=k+1;
  if((is[i]==' ') && (is[i+1]!=' ')) {
       slovo=slovo+1;
         if(slovo==3) {
           s=k;
            do {
             i=s; z=s;
             i=i+1; z=z+1;
              if(is[i]==' ') {
                l=z; break; } } while((is[i]!=0));

              }
}
} while((slovo<3 )|| (is[i]!=0));

for(i=0,j=0;i!=s;i++,j++){
os[j]=is[i];
    }

if (l!=0) {
   for(i=l,j=s;is[i]!=0;i++,j++) {
   os[j]=is[i];
   }
}
Но теперь дальше вывода входной строки программа не выполняется ! Помогите, скажите где ошибка пожалуйста!
Артем Смирнов вне форума Ответить с цитированием
Старый 15.05.2012, 20:45   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот что я тебе посоветую:
1) Разбей строку на массив слов: http://www.programmersforum.ru/showthread.php?t=91677 Или http://www.programmersforum.ru/showthread.php?t=121545

2) Далее просто выводи на экран все элементы массива, пропуская каждый третий.

Идею понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа функциями "ЕСЛИ", "И" и вывод текстового результата johny_03 Microsoft Office Excel 3 04.08.2014 11:01
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Напечатать текст, удалив из него все цифры и знаки "+" или "–". Язык С++. KaylasMKTY Помощь студентам 8 07.03.2010 21:35
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
PHP(или другой язык): Получить все пары "имя" -> "значение" переданные методом POST KingOfNothing PHP 4 12.04.2009 14:06