Как обрезать пробелы (правая сторона) в этом массиве? - PullRequest
0 голосов
/ 24 января 2019

Здравствуйте, у меня есть проблема с решением задачи программирования на языке C.

Функция "Trim" должна заменить все пробелы в конце строки на null.В качестве параметра он получает строку, но он не должен ничего возвращать.

Вторая функция countSpaces должна считать все пробелы в массиве.В качестве параметра он получает массив из двух элементов и должен возвращать количество пробелов в массиве.

Другие заголовки не допускаются.

Оригинал на немецком языке:

Die erste Funktion Trim soll alle Leerzeichen am Ende einer Zeichenkette löschen (dh mit dem ASCII-Wert 0 überschreiben).Als Parameter Wird Die Zeichenkette übergeben.Die Funktion gibt nichts zurück.

Die zweite Функция countSpaces soll alle Leerzeichen in einem Array von 10 Zeichenketten mit je maximal 50 Zeichen zählen.Als Parameter erhält es ein zweidimensionales Array von Zeichen.Das Funktions-ergebnis ist die Anzahl der Leerzeichen in allen Zeichenkette des Arrays von Zeichenketten.

Weitere Headerdateien sind nicht erlaubt

#include <stdio.h>

int main()
{
   char Text[10][50] = {"Dies ist ein langer      ",
                        "Text, der in mehreren    ",
                        "Zeilen untergebracht     ",
                        "ist und der auch noch    ",
                        "in manchen Zeilen mehrere",
                        "Leerzeichen am Ende      ",
                        "beinhaltet! Die Leer-    ",
                        "zeichen dieses Textes    ",
                        "sollen gezählt werden!   ",
                        "                         "};
   int i = 0;
   for (i = 0; i < 10; i++)
      Trim(Text[i]);
   printf("\nIn dem Text sind %i Leerzeichen enthalten!\n",
           countSpaces(Text));
}

ОБНОВЛЕНИЕ: вот где я стою сейчас,ребята, вы, ребята, я сейчас здесь:

#include <stdio.h>

int  mystrlen(const char *str);
void *Trim(char *str, int ch);
int countspaces(const char *str);


int main()
{

   char Text[10][50] = {"Dies ist ein langer      ",
                        "Text, der in mehreren    ",
                        "Zeilen untergebracht     ",
                        "ist und der auch noch    ",
                        "in manchen Zeilen mehrere",
                        "Leerzeichen am Ende      ",
                        "beinhaltet! Die Leer-    ",
                        "zeichen dieses Textes    ",
                        "sollen gezählt werden!   ",
                        "                         "};
   int i = 0;
   for (i = 0; i < 10; i++)
   {

       Trim(Text[i], ' ');
       printf("Number of spaces after trim: %d\n", countspaces(Text[i]));
   }
}


int mystrlen(const char *str)
{
    const char *end = str;

    while(*end++);

    return end - str - 1;
}


void *Trim(char *str, int ch)
{
    char *end = str + mystrlen(str) - 1;

    do
    {
        if(*end == ch) 
        {
            *end = 0;
        }
        else
        {
            break;
        }
    }while(str != end--);
    return str;
}

int  countspaces(const char *str)
{
    int  count = 0;

    while(*str)
    {
        count += *str++ == ' ' ? 1 : 0;
    }
    return count;
}

Пока это работает.

Можно ли посчитать пробелы для всего массива?

1 Ответ

0 голосов
/ 24 января 2019
char *remove_trailing_char(char *str, int ch)
{
    char *end = str + strlen(str) - 1;

    do
    {
        if(*end == ch) 
        {
            *end = 0;
        }
        else
        {
            break;
        }
    }while(str != end--);
    return str;
}

Полное решение

size_t mystrlen(const char *str)
{
    const char *end = str;

    while(*end++);

    return end - str - 1;
}


char *remove_trailing_char(char *str, int ch)
{
    char *end = str + mystrlen(str) - 1;

    do
    {
        if(*end == ch) 
        {
            *end = 0;
        }
        else
        {
            break;
        }
    }while(str != end--);
    return str;
}

size_t countspaces(const char *str)
{
    size_t count = 0;

    while(*str)
    {
        count += *str++ == ' ' ? 1 : 0;
    }
    return count;
}

int main()
{
    size_t nspaces;
   char Text[10][50] = {"Dies ist ein langer      ",
                        "Text, der in mehreren    ",
                        "Zeilen untergebracht     ",
                        "ist und der auch noch    ",
                        "in manchen Zeilen mehrere",
                        "Leerzeichen am Ende      ",
                        "beinhaltet! Die Leer-    ",
                        "zeichen dieses Textes    ",
                        "sollen gezählt werden!   ",
                        "                         "};
   int i = 0;
   for (i = 0; i < 10; i++)
   {
       printf("Number of spaces before trim: %zu\n", countspaces(Text[i]));
       remove_trailing_char(Text[i], ' ');
       printf("Number of spaces after trim: %zu\n", countspaces(Text[i]));
   }
}

И играй с ним сам https://onlinegdb.com/H1p13QDXE

...