如何 Trim 这个数组中的空格(右侧)?

How to Trim of the spaces(right side) in this Array?

你好,我在用 C 语言解决编程任务时遇到了问题。

The funktion "Trim" should replace all spaces at the end of a String with null. As parameter it gets a string but it dosent need to return anything.

The second funktion "countSpaces" should count all spaces in an Array. As parameter it gets a 2 dementional Array and it should return the number of spaces in the Array.

Other Headers arent allowed.

德语原文:

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

Die zweite Funktion 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;
}

目前有效。

是否也可以计算整个数组的空间?

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