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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 18:32   #1
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию Без создания нового списка, а с мофидикацией исходного

Как по этой программе?
Код:
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
const char N=80;

struct Item{
char c;
Item *next;
};
Item *createList(const char *str){
	Item *first = NULL, *last = NULL;
	   while(*str){
	   Item *cur = new Item;
	   cur->c=*str++;
	   cur->next=NULL;
	      if(first==NULL)
			  first=cur;
	      else
			  last->next=cur;
		  last=cur;
	   }
     return first;
}

//void work(const char* src, char* rez)
//{
//	char * p = rez;
//	src=space(src);
//	src=word(src);
//	while(*(src=space(src)))
//    
//	{
//		const char *p = word(src)-1;
//		while(p>=src)
//			*(rez++) = *(p--);
//		*(rez++) = ' ';
//		src=word(src);
//	}
//	if (rez!=p)
//		rez--;
//	*rez = 0;
//}

Item *space(Item *p)
{
	while(p && (p->c== ' '
		|| p->c==  '\t'))
		p=p->next;
	return p;
}

Item *word(Item *p)
{
	while(p && (p->c!= ' '
		&& p->c!=  '\t'))
		p=p->next;
	return p;
}


Item *copy(Item *to, Item *from)
{
	Item *tmp = to, *cur;
	bool priznak = true;
	while(from && from->c!= '\t' && from->c!=' '){
			cur = new Item;
			cur->c=from->c;
			cur->next=NULL;
		     if(priznak) {
				priznak = !priznak;
	 	    	tmp = cur;
			}
			cur->next = to->next;
			to->next = cur;
			from=from->next;
	}
	//cur = new Item;
	//cur->c = ' ';
	//cur->next = NULL;
	//tmp->next = cur;
	//to = cur;
	to = tmp;
	return to;
}

	Item *delword(Item *p)
	{
		while(p && p->c!= ' ' && p->c!= '\t'){
			Item *t=p;
			p=p->next;
			delete t;
		}
		return p;
}

void showList(char msg[], const Item* p)
{
	cout << msg << endl;
	cout << "'";
	while( p) {
		cout<<p->c;
		p = p->next;
	}
	cout << "'" << endl;
}
void dellist(Item* p)
{
	while(p){
		Item *t=p;
		p=p->next;
		delete t;
	}
}

Item *work(Item *src)
{
	Item head={ ' ', NULL}, *rez=&head, *cur;
	int fl=1;
	while(src=space(src)){
		if(fl) {
			if(head.next) {
				cur = new Item;
				cur->c = ' ';
				cur->next = NULL;
				rez->next = cur;
				rez = cur;
			}
			rez=copy(rez, src);
		}
		fl = 1;
		src=word(src);
	}
	return head.next;
}

int main(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"Russian");
	char src[N], rez[N];
	Item* isrc, *irez;
	*rez= 0;
	while(cout << "Введите строку символов: ",cin.getline(src,80))
	{
		isrc=createList(src);
		irez = work(isrc);
		showList("Исходный список",isrc);
		showList("Полученный список",irez);
		//cout<<rez<<'!'<<endl;
		dellist(isrc);
		dellist(irez);
	}

return 0;
}
REztor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Без создания нового списка, а с мофидикацией исходного REztor Помощь студентам 0 10.11.2009 00:28
Обновление списка данных без потери данных в переменных VaBank БД в Delphi 13 03.06.2009 10:47
Билдер6. Запуск из списка нового приложения. LimanSSk Помощь студентам 1 18.05.2009 00:04
Автоматизация создания нового письма в MS Outlook. SANIOK_AV Общие вопросы Delphi 1 13.04.2009 10:17
Макрос для создания нового листа в др.книге natty29 Microsoft Office Excel 3 14.02.2009 06:46