Помогите исправить ошибку в задаче на символьные массивы (язык C)

Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

06 окт 2008, 20:23

Ещё раз для тех, кто на бронепоезде: я не автор темы и код ни какой не представлял. Смотри выше.
А какое моё высказывание воспринято как оскорбление?
MrVenom
Сообщения: 18
Зарегистрирован: 05 окт 2008, 16:53
Контактная информация:

06 окт 2008, 20:28

Блин)) я в бронепоезде))) тут я мешок)))
А какое моё высказывание воспринято как оскорбление?
Красиво научиться писать - сделает тебе честь
Пишу программы. Не дорого. icq: 27ноль9два2. E-mail: Sn0Xx[гав-гав]yandex.ru
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

06 окт 2008, 20:32

MrVenom, Вы правда считаете, что представили красивый код? Не обижайтесь пожалуйста, ибо ни чего обидного я не пытался вложить в свои слова! Раз вы считаете себя асом в программировании, то пусть так и будет.
MrVenom
Сообщения: 18
Зарегистрирован: 05 окт 2008, 16:53
Контактная информация:

06 окт 2008, 20:37

Не, я не грю что представил, я грю, что если делать красиво с точки зрения расхода памяти, то это надо думать))) А асом не считаю)) нет предела совершенству)) Расфлудились блин... Мир))
Пишу программы. Не дорого. icq: 27ноль9два2. E-mail: Sn0Xx[гав-гав]yandex.ru
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

06 окт 2008, 22:15

Вот мой вариант. Не судите строго, ибо не сделана проверка выхода за пределы массива и не учитывается регистр букв, оставляю это автору поста. Хотелось показать, что можно обойтись без флагов и индексов.

Код: Выделить всё

 
#include"iostream"
using namespace std;
void main()
{ 
cout << "Input string:";
char out[100]={0};// выходной массив
char c;
const char chSep(' ');//разделитель слов в результирующей строке
char *pFirst=out;// указатель на первую букву считанного слова
char *pLast=out;// указатель на последнюю букву считанного слова
while ((c = getchar())!='\n') 
{
if (isalpha(c)) // если буква
{
*pLast++=c;// сохраняем в массиве
*pLast=0;//затираем следующий символ
}
else //любой другой символ считается разделителем слов
{
if(*pFirst!=*(pLast-1)) 
{
pLast=pFirst;// возвращаемся в начало только что считанного слова, не удовлетворяющего условию
*pLast=0;// вставляем конец строки
}
else 
{
pFirst=pLast+1;//готовим место для следующего слова
*pLast++=chSep;// вставляем сепаратор
}
}
}
cout << "Output string: " << out << "\n"; 
system("pause");
}
Katiox-xa
Сообщения: 6
Зарегистрирован: 02 окт 2008, 09:41

08 окт 2008, 20:44

Всем спасибо большое
Ответить