Ещё раз для тех, кто на бронепоезде: я не автор темы и код ни какой не представлял. Смотри выше.
А какое моё высказывание воспринято как оскорбление?
Помогите исправить ошибку в задаче на символьные массивы (язык C)
Блин)) я в бронепоезде))) тут я мешок)))
А какое моё высказывание воспринято как оскорбление?
Красиво научиться писать - сделает тебе честь
Пишу программы. Не дорого. icq: 27ноль9два2. E-mail: Sn0Xx[гав-гав]yandex.ru
MrVenom, Вы правда считаете, что представили красивый код? Не обижайтесь пожалуйста, ибо ни чего обидного я не пытался вложить в свои слова! Раз вы считаете себя асом в программировании, то пусть так и будет.
Не, я не грю что представил, я грю, что если делать красиво с точки зрения расхода памяти, то это надо думать))) А асом не считаю)) нет предела совершенству)) Расфлудились блин... Мир))
Пишу программы. Не дорого. icq: 27ноль9два2. E-mail: Sn0Xx[гав-гав]yandex.ru
Вот мой вариант. Не судите строго, ибо не сделана проверка выхода за пределы массива и не учитывается регистр букв, оставляю это автору поста. Хотелось показать, что можно обойтись без флагов и индексов.
Код: Выделить всё
#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");
}