Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> СТРОКИ В СИ в среде BC 3.1 
:(
    Опции темы
bsa
Дата 20.1.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Код
#include <stdio.h>
#include <string.h>
main()
{
    char s[200];
    int i, j, len;
    printf("Enter string: ");
    fgets(s, 200, stdin);
    len = strlen(s);
        if (s[len-1] == '\n')
                s[--len] = '\0';
    //убираем пробелы в начале
    for(i = 0; (i < len) && (s[i] == ' '); ++i);

    if (i > 0) {
        len -= i;
        strcpy(s, s+i);
    }
    //убираем лишние пробелы в середине
    i = 0;
    while(i < len) {
        for(; (i < len) && (s[i] != ' '); ++i);
        if (s[i] == ' ') {
            for(j = i+1; (j < len) && (s[j] == ' '); ++j);
            if (j - i > 1) {
                strcpy(s + i, s + j - 1);
                len = strlen(s);
            }
        }
                ++i;
    }
    //убираем пробел в конце, если есть
    if (s[len-1] == ' ')
        s[len-1] = '\0';
    printf("result: \"%s\"\n", s);

}
Надо было в моем коде всего одну ошибку исправить, чтобы заработал!

Добавлено @ 18:06 
Цитата(Цивильный @ 20.1.2007,  18:02)
КАКИЕ ЖЕ ВЫ ЗЛЫЕ smile

Мы не злые. Просто ты лентяй заставляешь нас всякими глупостями заниматься. Хотя есть более интересные задачки.
PM   Вверх
Anikmar
Дата 20.1.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(bsa @  20.1.2007,  18:05 Найти цитируемый пост)
Надо было в моем коде всего одну ошибку исправить, чтобы заработал! 

Мне быстрее показалось свою сляпать  smile

Добавлено @ 18:08 
Нет худа без добра - у автора темы есть 2 работающих алгоритма, отличающихся подходом! Даже для такой пустяковой задачки можно идти несколькими путями!
PM MAIL ICQ   Вверх
bsa
Дата 20.1.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Anikmar @ 20.1.2007,  18:07)
Цитата(bsa @  20.1.2007,  18:05 Найти цитируемый пост)
Надо было в моем коде всего одну ошибку исправить, чтобы заработал! 

Мне быстрее показалось свою сляпать  smile

Это я не тебе smile
PM   Вверх
Anikmar
Дата 20.1.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



bsa,  я понял, я просто объяснил почему именно я не стал ее искать и править.

Цивильный, А вообще-то, немного подумать не мешает - ведь дальше может быть сложнее... Блин, вот щас учиться халява! В мои времена интернета (доступного) не было... Форумов тоже...

PM MAIL ICQ   Вверх
S.A.G.
Дата 20.1.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Про "стимулятор" особенно понравилось. Давайте, мол, работайте, работайте, а я вам талончик куплю в тролейбус smile

З.Ы. Большенство задач в этом разделе решаються элементарно с эффективным применением учебника или даже справки по функциям.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Anikmar
Дата 20.1.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(main @  20.1.2007,  18:24 Найти цитируемый пост)
Про "стимулятор" особенно понравилось. Давайте, мол, работайте, работайте, а я вам талончик куплю в тролейбус 


Кстати о птичках. За язык никто не тянул, а за базар отвечать надо!  smile 

Цивильный, где обещанное? bsa свой код первым выложил - бутылку пива ему!
PM MAIL ICQ   Вверх
Dov
Дата 20.1.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



В языке С считается хорошим тоном операции со строками  выполнять с помощью указателей.  smile 
Код
#include <stdio.h> 

void main(void)
{
    char s[200],s2[200];
    char* pS  = s;
    char* pS2 = s2;

    printf("Enter string: \n");
    fgets(s, 200, stdin);

    // пока не конец строки
    while(*pS)
    {         
        while(*pS == ' ')              
            pS++;                      // пробелы - пропускаем        
        while(*pS != ' ')              
            *pS2++ = *pS++;            // не пробелы - заносим в строку s2    
        *pS2++ = *pS++;                // туда же добавляем один пробел между словами        
    }
    *pS2 = '\0';    
    puts(s2);
    
    printf("\nEnter any key");
    getch();
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
bsa
Дата 20.1.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Dov @ 20.1.2007,  18:50)
В языке С считается хорошим тоном операции со строками  выполнять с помощью указателей.  smile 

С этим никто не спорит. Только ты ему потом будешь объяснять, что такое указатель и чем он от массива отличается? smile
PM   Вверх
Anikmar
Дата 20.1.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Dov @  20.1.2007,  18:50 Найти цитируемый пост)
В языке С считается хорошим тоном операции со строками  выполнять с помощью указателей.   


А в чем прикол? Если последовательное движение по массиву - конечно можно и указателем.
А если произвольный доступ к элементам массива?

Если касаемо написанных примеров, то код со скобками более читаемый.

Думаю такое мнение произошло в то время, когда машины были совсем уж медленные.

Запись a[i] колмпилятором переводится как *(a+*sizeof(i)) - Что-то в этом роде.
Последовательный инкремент указателя требует, конечно, меньших ресурсов. 

Но в данном конкретном случае привело бы к усложнению читаемости кода, и соответственно к его пониманию...
PM MAIL ICQ   Вверх
Dov
Дата 20.1.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Anikmar @  20.1.2007,  17:56 Найти цитируемый пост)
А в чем прикол?
Anikmar, никакого прикола нет. Просто так принято у сишников.  smile 

Цитата(Anikmar @  20.1.2007,  17:56 Найти цитируемый пост)
А если произвольный доступ к элементам массива?
Нет никакой разницы, абсолютно.  smile 

Цитата(Anikmar @  20.1.2007,  17:56 Найти цитируемый пост)
Если касаемо написанных примеров, то код со скобками более читаемый.
Не буду говорить за всех, но для меня лично код со звёздочками более читаемый.  smile 

Цитата(Anikmar @  20.1.2007,  17:56 Найти цитируемый пост)
Но в данном конкретном случае привело бы к усложнению читаемости кода, и соответственно к его пониманию...
Опять же, это для кого как.  smile

Добавлено @ 19:25 
Цитата(bsa @  20.1.2007,  17:55 Найти цитируемый пост)
Только ты ему потом будешь объяснять, что такое указатель и чем он от массива отличается? 


bsa, я не препод.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Rockie
Дата 20.1.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Anikmar @  20.1.2007,  18:56 Найти цитируемый пост)
Запись a[i] колмпилятором переводится как *(a+*sizeof(i)) - Что-то в этом роде.

просто 
Код

*(a+i)


Добавлено @ 19:45 
а для двумерных
Код

*(*(a+строка)+столбец)





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Dov
Дата 20.1.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Вобще-то, более паравильно сделать так:
Код
#include <stdio.h> 

void main(void)
{
    char  s[200], s2[200];
    char* pS  = s;
    char* pS2 = s2;

    printf("Enter string: \n");
    fgets(s, 200, stdin);

    // пока не конец строки
    while(*pS)
    {         
        while(*pS && *pS == ' ')              
            pS++;                      // пробелы - пропускаем        
        while(*pS && *pS != ' ')              
            *pS2++ = *pS++;            // не пробелы - заносим в строку s2
        if(*pS)
            *pS2++ = *pS++;            // туда же добавляем один пробел между словами        
    }
    *(pS2-1) = '\0';    
    puts(s2);
    
    printf("\nEnter any key");
    getch();    
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Anikmar
Дата 20.1.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Rockie @  20.1.2007,  19:43 Найти цитируемый пост)
просто 

код C++
1:

*(a+i)


Естественно - это я сам себя перехитрил  smile 



Dov, наверное правильнее, за исключением того, что в вашем коде остается заключительный пробел. Я так понял начальные и конечные резать надо... Хотя по большому счету от моего кода ничем не отличается - за исключением использования указателя.

ИМХО мне больше нравятся скобки - они нагляднее, особенно если кому-то что-то объясняешь. 

И вообще - если вы все такие умные, то почему строем не ходите?!  smile 
PM MAIL ICQ   Вверх
S.A.G.
Дата 20.1.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Народ, не спорьте. В си можно одно и тоже как угодно писать. У каждого кодера свой стиль. smile


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
bsa
Дата 20.1.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(main @ 20.1.2007,  21:11)
Народ, не спорьте. В си можно одно и тоже как угодно писать. У каждого кодера свой стиль. smile

В том-то и дело, что не совсем одно и тоже. Вариант с указателями работает быстрей, чем с индексами.
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.