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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 19:38   #1
Adminx
 
Аватар для Adminx
 
Регистрация: 17.06.2009
Сообщений: 7
Сообщение Cмещение указателей (вида *а++) и их запоминание (на начало исходной и результирующей строки

Написать ФУНКЦИЮ обработки строк. Функция должна помещать результат
в другую строку. Ввод исходной строки и вывод результата - в main().
Тип функции - void, char* или int (в зависимости от задания)
Параметры функции (задаются в скобках) -
исходная строка, выходная строка, дополнительные
параметры по условию задания (символы, номера).
НЕЛЬЗЯ использовать готовые функции для обработки строк, но можно
написать вспомогательные функции.
УПРОЩЕНИЕ: между словами - ровно 1 пробел, в начале и конце строки
пробелов нет. Задание выполнить двумя способами
а) используя смещение указателей (вида *а++) и их запоминание
(на начало исходной и результирующей строки, на начало и
конец слова и т.п.);
б) используя индексы a[i] или *(a+i).

Обмен слов 2
Исходная строка - несколько слов, разделенные 1 пробелом
Результат - измененная исходная строка, в которой
самое длинное и самое короткое слова меняются местами.
Если несколько таких слов имеют одинаковую длину, меняются первые.
Adminx вне форума Ответить с цитированием
Старый 02.12.2009, 19:40   #2
Adminx
 
Аватар для Adminx
 
Регистрация: 17.06.2009
Сообщений: 7
Сообщение вариант б

Код:
#include<iostream>
using namespace std;

char s1[30],s2[30]; ];//s1 - исходная строка, s2 - после преобразования
int mina, minb, mi = 30;
int maxa,maxb,ma = 0;

void read(){
	cin.getline(s1,30); ];//считывыаем строку s1 длиной 30 символов
}

void found_min(){];//поиск наименьшего по длине слова
	int i, cur = 0;
	for(i=0;;i++){
		if(s1[i]==NULL || s1[i]==' '){
			if(mi>(i-cur)){
				mi = i-cur;
				mina = cur;
				minb = i-1;
			}
			cur = i + 1;
		}
		if(s1[i]==NULL) break;
	}
}

void found_max(){//поиск наибольшего по длине слова
	int i, cur = 0;
	for(i=0;;i++){
		if(s1[i]==NULL || s1[i]==' '){
			if(ma<(i-cur+1)){
				ma = i-cur;
				maxa = cur;
				maxb = i-1;
			}
			cur = i + 1;
		}
		if(s1[i]==NULL) break;
	}
}

void swap_words(){//обмен местами самого длинного и самого короткого слова
	int fn = min(mina,maxa), fk = min(minb,maxb), sn = max(mina,maxa), sk = max(minb,maxb);
	int i,current = 0;
	for(i=0;i<fn;i++){
		s2[current] = s1[i];
		current++;
	}
	for(i=sn;i<=sk;i++){
		s2[current] = s1[i];
		current++;
	}
	for(i=fk+1;i<sn;i++){
		s2[current] = s1[i];
		current++;
	}
	for(i=fn;i<=fk;i++){
		s2[current] = s1[i];
		current++;
	}
	for(i=sk+1;s1[i]!=NULL;i++){
		s2[current] = s1[i];
		current++;
	}
}

void main(){
	read();
	found_min();
	found_max();
	swap_words();
	printf("%s",s2); //Вывод обработанной строки

 }

Как реализовать вариант a?

Последний раз редактировалось Sazary; 03.12.2009 в 19:56.
Adminx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть ли какой-то табулятор для перемещения в начало первой строки pavelstraut Общие вопросы C/C++ 6 21.07.2009 20:21
Дана строка символов. Удалить из исходной строки все цифры. Striker14 Помощь студентам 4 26.02.2009 15:50
Переставить все буквы латинского алфавита в начало строки в порядке следования. zaq2000 Паскаль, Turbo Pascal, PascalABC.NET 17 18.12.2008 23:42
Удалить из строки все группы букв вида abcd Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 5 27.11.2008 12:48
Удалить из строки все группы вида abcd Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 8 18.11.2008 19:40