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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

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

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

Katiox-xa » 08 окт 2008, 20:44

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

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

Albor » 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");
}

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

MrVenom » 06 окт 2008, 20:37

Не, я не грю что представил, я грю, что если делать красиво с точки зрения расхода памяти, то это надо думать))) А асом не считаю)) нет предела совершенству)) Расфлудились блин... Мир))

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

Albor » 06 окт 2008, 20:32

MrVenom, Вы правда считаете, что представили красивый код? Не обижайтесь пожалуйста, ибо ни чего обидного я не пытался вложить в свои слова! Раз вы считаете себя асом в программировании, то пусть так и будет.

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

MrVenom » 06 окт 2008, 20:28

Блин)) я в бронепоезде))) тут я мешок)))
А какое моё высказывание воспринято как оскорбление?
Красиво научиться писать - сделает тебе честь

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

Albor » 06 окт 2008, 20:23

Ещё раз для тех, кто на бронепоезде: я не автор темы и код ни какой не представлял. Смотри выше.
А какое моё высказывание воспринято как оскорбление?

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

MrVenom » 06 окт 2008, 18:35

1. дык ты описал бы конкретно... символы типа "+" будут расцениватся как буквы. с ними что надо делать тоГ? пропускать или удалять или как, или ошибку выводить?... не вводить тогда да и все. ну будет ddg+dd он его запишет все равно.
2. В твоем коде переменных больше по-моему.
3. что указатель - 4 байта, что инт 4 байта, разницы не вижу.
4. тут сам поправь, легче легкого
А вот оскорблять не надо. тоже могу.

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

Albor » 06 окт 2008, 18:17

1. В условии сказано о буквах, но ни как не о символах '+' и им подобных.
2.Против типа bool абсолютно ни чего не имею против, но в приведенном листинге много ненужных переменных.
3. А ты попробуй, только память динамически выделять не нужно - это лишнее.
4. Какими хочешь, кроме ф-ций обработки строк (условие запрещает). Можно и без функций, но придётся писать сравнительно длинные выражения в if.
Красиво научиться писать - сделает тебе честь, после чего можно и денюжку попросить. Лично для себя я и сам напишу, если понадобится - в этой теме я не проситель.

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

MrVenom » 06 окт 2008, 17:41

Так:
1. тире, и двоеточия всякие будут расцениватся как обычные символы. т.е. если +выа+ то он это слово добавит.
2. чем тебе bool не нравится?
3. если делать с указателями и ваще динамическим выделением памятигемора пипец будет, но вполне возможно
4. ваще какими функциями можно пользоваться?
Хочешь красиво это тебе в денюшку встанет уже))

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

Albor » 06 окт 2008, 14:12

MrVenom писал(а):Подумал :D вот с одним массивом:

:D Ну, вот, продолжаем разговор: а если во входной строке появятся запятые или тире, или двоеточие и т.п.? Можно ещё избавиться от "флаговой" переменной типа bool, а также, вместо индекса, запоминающего начало слова, попробовать использовать указатель, а если в условных операторах использовать рекомендуемые выше функции, то получится ещё красивее.

Вернуться к началу