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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2010, 09:05   #1
Daramos
Новичок
Джуниор
 
Регистрация: 16.12.2010
Сообщений: 1
По умолчанию С++ Строки - списки. Удаление элементов списка.

Господа - программисты, вы всесильны, я знаю. Помоги же немного.

Задача : Из входного потока вводиться произвольное число строк. Каждая строка представляет собой последовательность слов, разделяемых пробелами. Для каждой строки сформировать новую, поместив все слова исходной строки такой же длинны, как и первое слово в строке. Полученную строку вывести на экран. Каждая строка -список. Первое поле элемента списка-символ, второе -указатель на следующий элемент списка. Список результата формировать, модифицируя исходный список.
Мой код :

Код:
#include <cstdlib>
#include <iostream>

using namespace std;

struct list {
  char elem;
  list *next;
};

void strIn(list *&in) {
  char cur;
  cur = cin.get ();
  if (cin.good ()){
    if(cur == '\n'){
      in = 0;
    }else{
      in = new list; 
      in->elem = cur; 
      strIn(in->next); 
    }
  }
}

void strDel (list *&in){
    if (in) {      
      list *a = in;
      in->next = a;
      in = in->next;
      delete a; 
      strDel (in->next);}
    }  

int wordLength (list *in, list *&f){
  if (in && !isspace (in->elem))
    return 1 + wordLength(in->next, f);
  f = in;
  return 0;
}            

list* strSpace(list *in){
  if (in && isspace (in->elem))
    return strSpace(in->next);
  else
    return in;
}
                     
void strOut(list *out){
  if (out){
    cout << out->elem; 
    strOut (out->next);
  }else
    cout << endl ;
}  
     
void strClear (list *out){
  if (out){
    list *sav = out->next; 
    delete out;
    strClear (sav);
  }
}  

void strTry(list *in, int len){
  if (in){
    list *f;
    in = strSpace (in);
    int ln = wordLength (in, f);
    if (len != ln)
      strDel (f);

    strTry (f, len);
  }
}

int main(){
  list *vvod, *f;
  while (cin.good ()){
    strIn (vvod);
    if (cin.good ()){
	f = strSpace (vvod);
	int c = wordLength (f, f);
	
	strTry (vvod, c); 
	strOut (vvod);
	
	strClear (vvod);
	}
  }
  return 0;
}

Проблема, точно с удалением элементов, подскажите как исправить, пожалуйста.
Daramos вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
Списки. Удаление элемента из списка. thexqn Помощь студентам 0 11.05.2010 09:04
Удаление элементов из списка. grave123 Общие вопросы C/C++ 0 10.03.2010 15:33
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Удаление элементов из списка Wi1D Помощь студентам 0 18.05.2009 00:23