szukanie zaawansowane
 [ Posty: 3 ] 
Autor Wiadomość
Mężczyzna
PostNapisane: 25 lip 2019, o 12:58 
Użytkownik

Posty: 37
Lokalizacja: Warszawa
Witam, zacząłem się uczyć języka programowania C i mam problem z pewnym zadaniem. Polecenie brzmi, abym zamienił ciągi spacji między wyrazami na jedną spację. Mogę używać funkcju getchar, putchar, while, for, if, printf, ale żadnych else, scanf - ogólnie samych najbardziej podstawowych. Napisałem taki kod:
Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

main()
{
    int a,b;

    while((a=getchar()) !=EOF){
        if(a==' '){
                putchar(a);
                b=getchar();
                if(b==' ')
                    ;
                if(b !=' ')
                    putchar(b);
        }
        if(a !=' ')
            putchar(a);
}
}


Problem jest w tym, że ten program usuwa na oko patrząc w danym ciągu tylko połowę spacji (np. dla "ahoj przygodo" zwraca "ahoj przygodo"), a chodzi mi by usunięte zostały wszystkie spacje oprócz jednej. Nie rozumiem w którym miejscu popełniam błąd, więc proszę o pomoc, wyrozumiałość i wyjaśnienie co robię nie tak.

Pozdrawiam.

-- 25 lip 2019, o 12:33 --

Rozwiązane, temat do usunięcia. :P

-- 25 lip 2019, o 12:45 --

Jednak nie naprawione. Już wiem dlaczego program usuwa tylko połowę spacji, ale wciąż nie wiem jak można rozwiązać to zadanie.
Góra
Mężczyzna
PostNapisane: 25 lip 2019, o 14:32 
Moderator

Posty: 2787
Lokalizacja: Seattle, WA
Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void) {
   char previousCharacter = '\0';
   char current;
   
   while((current = getchar()) != EOF){
      if(current != previousCharacter || current != ' '){
         putchar(current);
      }
      
      previousCharacter = current;
   }
   
   return 0;
}
Góra
Mężczyzna
PostNapisane: 25 lip 2019, o 14:37 
Użytkownik

Posty: 37
Lokalizacja: Warszawa
Dzięki za odpowiedź, ale chodziło mi o zrobienie tego zadania prymitywnie, bez użycia takich rzeczy jak char, nie wiem też co znaczą dwie pionowe kreski koło siebie, a nawet "void".

Już mi się udało, temat do zamknięcia:
Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

main()
{
    int a,b;

    while((a=getchar()) !=EOF){
        if(a==' '){
                putchar(a);
                while((b=getchar())==' ')
                    ;
                putchar(b);
        }
        if(a !=' ')
            putchar(a);
}
}
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 3 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 ZAMIANA systemow liczbowych, liczby niecalkowite.  bisz  1
 zamiana systemu szesnastkowego na dziesietny  tomekbobek  2
 Zamiana na GIF  Bierut  15
 zamiana na system binarny i szesnastkowy  piotrekszy  9
 "Przekształcenie" pewnego ciągu...  chomzee  6
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl