Usuwanie tabulacji i spacji z końca linii

0

nie działa program nie wiem dlaczego

#include <stdio.h>
#define end 10 //liczba mozliwych znakow w tablicy

int getline(char tab[])
{
    int i, c;
    for (i = 0; i < end && (c = getchar()) != EOF; ++i)
        tab[i] = c;
    return 0;
}
void tremove(char tab[])
{
    int i;
    for (i = 0; tab[i] < '\0' - 1; i++) {
        if ((tab[i] = ' ' && tab[i] = '\t') && tab[i + 1] = '\n')
            tab[i] = tab[i + 1];
        i++;
    }
}
int main(int argc, char* argv[])
{
    char tab[end];
    int i;
    getline(tab);
    tremove(tab);
    for (i = 0; i < end; ++i) {
        printf("\n%s", tab);
    }
    return 0;
}

 
0

Trochę nie za bardzo ogarniam co się dzieje w twoim kodzie (późna godzina, sobota i nie chce się), ale ja bym to napisał tak:

void tremove(char *str) {
  char *end = str + strlen(str) - 1;

  while (is_space(*end)) end--;

  *(end + 1) = 0;
}
0

Nudzi mi się w oczekiwaniu na kobietę do wyjścia więc rozpiszę co robi twój kod:

void tremove(char tab[]) {
    int i;
    for (i = 0; tab[i] < '\0' - 1; i++) { // dla każdego elementu tablicy `tab` tak długo jak wartość pod indeksem `i` jest mniejsza od -1 (co jest UB, bo standard nie definiuje czy `char` jest ze znakiem czy bez)
        if ((tab[i] = ' ' && tab[i] = '\t') && tab[i + 1] = '\n') // zastąp element `i` w tablicy `tab` znakiem tabulacji a element po nim znakiem przejścia do nowej linii
            tab[i] = tab[i + 1]; // zastąp element `i` w tablicy `tab` wartością po nim następującą
        i++; // zwiększ index
        // zwiększ indeks jeszcze raz
    }
}

Czyli w dużym skrócie twoja funkcja zastępuje wszystkie elementy w tablicy (+1) znakiem przejścia do nowej linii. Dodatkowo wszystko zależy czy kompilator traktuje char jako liczbę ze znakiem czy bez znaku.

Słowem ta funkcja to jakaś totalna bzdura, użyj tego co napisałem wcześniej, jak nie możesz użyć strlen to sobie to napisz.

0

tera porpawiłem, ale dalej nie działa prawidłowo


#include <stdio.h>
#define end 10 //liczba mozliwych znakow w tablicy
 
int getline(char tab[])
{
    int i, c;
    for (i = 0; i < end && (c = getchar()) != EOF; ++i)
        tab[i] = c;
    return 0;
}
void tremove(char tab[])
{
    int i;
    for (i = 0; tab[i] < '\0' - 1; i++) {
        if ((tab[i] == ' ' && tab[i] == '\t') && tab[i + 1] == '\n')   //jesli ement i-ty jest = \t lub ' ' //,a nastepny elemet jest nowa linia to element i-ty = element nastepny, aby zatkac diure gdzie bylo np \t
            tab[i] = tab[i + 1]; 
}
int main(int argc, char* argv[])
{
    char tab[end];
    int i;
    getline(tab);
    tremove(tab);
    // for (i = 0; i < end; ++i) {   
    printf("\n%s", tab);
    //}
    return 0;
} 
0

Teraz działa, w miare
mam pytanie, dlaczego na końcu wyświetla mi się coś takiego? << naprawde nie wiem
zad.jpg

#include <stdio.h>
#define end 10 //liczba mozliwych znakow w tablicy

int getline(char tab[])
{
    int i, c;
    for (i = 0; i < end && (c = getchar()) != EOF; ++i)
        tab[i] = c;
    return 0;
}
void tremove(char tab[])
{
    int i, n;
    for (i = 0; i < end; i++)
        if ((tab[i] == ' ' || tab[i] == '\t') && tab[i + 1] == '\n')
            for (n = i; n < end - 1; ++n)
                tab[n] = tab[n + 1];
}
int main(int argc, char* argv[])
{
    char tab[end];
    int i;
    getline(tab);
    tremove(tab);
    printf("\n%s", tab);
    return 0;
}
 
0

Może ktoś podopwiedzieć jak zrobić to zadanie, i dlaczego mój kod nie działa? Usuwanie tabulacji i spacji z końca linii i usuwanie pustych wierszów

1 użytkowników online, w tym zalogowanych: 0, gości: 1