1 Востаннє редагувалося Ярослав (01.10.2012 16:18:07)

Тема: Як замінити декілька символів одним в Сі?

Намагаюсь виконати вправу

Вправа 1-9. Напишiть програму, яка би копiювала свiй ввiд до виводу, замiнюючи
кожний ланцюжок з одного або бiльше пробiлiв на єдиний пробiл.

Від себе додам, що користуватись можна тільки цим:

Об'ява лише int, long, double типів змінних.
Використання лише while, for, циклів та if функції.
І застосування лише getchar() і putchar() методів.

Ну і авжеж printf із всім, що звідси вибігає, якщо потрібно.

#include <stdio.h>

main(){
    int c, sp;

    sp = 0;
    while((c = getchar()) != EOF){
        if (c == ' ')
        sp = ;
        if (sp > 1)
        c = ' ';
        putchar(c);
        sp = 0;
    }
    printf("%6d%6d", c, EOF);

}

Намагаюсь робити, але просто в голові не можу усвідомити, яким чином можна вплинути на вивід (putchar();).

Білий Лунь

2

Re: Як замінити декілька символів одним в Сі?

Більш правильно вживати "оголошення".
Можна запам'ятовувати кількість пробілів.
Якщо символ не пробіл, то обнуляємо змінну з пробілами і виводимо.
Якщо символ пробіл, то робимо інкремент. Виводимо лише тоді, коли кількість менше 2.
Не забувайте ставити відступи для оператору який виконується за умови.

if (c == ' ')
 sp = ;
 if (sp > 1)
 c = ' ';
 putchar(c);
 sp = 0;

Ось так більш правильно (шматок):

if (c == ' ') {
  sp++;
} else {
  sp = 0;
}

P.S. а як цей код взагалі працює?

Подякували: Ярослав1

3

Re: Як замінити декілька символів одним в Сі?

Та то я експериментував, просто для наочності привів шматок.

Білий Лунь

4

Re: Як замінити декілька символів одним в Сі?

Я про ось це:

 sp = ;

Доречі, розібрались?

5

Re: Як замінити декілька символів одним в Сі?

Ні. Не знаю що таке інкремент.

Білий Лунь

6

Re: Як замінити декілька символів одним в Сі?

Інкремент:

i++;

або:

i = i + 1;

ось так приблизно виглядає рішення, не перевіряв:

if (c == ' ') {
  sp++;
} else {
  sp = 0;
}

if (sp < 2) {
  putchar(c);
}

7

Re: Як замінити декілька символів одним в Сі?

Так, працює.
Автор іще не давав поняття else, тому думаю найкоректніший варіант:

#include <stdio.h>

main(){
    int c, sp;

    sp = 0;
    while((c = getchar()) != EOF){
        if (c == ' ')
         sp++;
        if (c != ' ')
          sp = 0;
        if (sp < 2)
          putchar(c);

    }

}
Білий Лунь
Подякували: Replace1