如何修剪此数组中的空格(右侧)?

时间:2019-01-24 11:27:08

标签: c arrays trim

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

  

功能“ Trim”应替换字符串末尾的所有空格   与null。作为参数,它获取一个字符串,但需要返回   任何东西。

     

第二个功能“ countSpaces”应计算数组中的所有空间。   作为参数,它得到一个2维数组,它应该返回   数组中的空格数。

     

允许其他标题。

德语原文:

  

Der erste Funktion饰物使Alle Leerzeichen am Ende einer Zeichen-   凯特·洛申(d.h. mit dem ASCII-Wert 0überschreiben)。 Als参数   死于Zeichenketteübergeben。 Die Funktion gibt nichtszurück。

     

死亡   zweite Funktion countSpaces在einem Array von中使所有Leerzeichen   10 Zeichenketten mit je最多50 Zeichenzählen。 Als参数设置   es ein zweiDimensiones Array von Zeichen。 Das Funktions-ergebnis   和艾伦·塞恩肯蒂特·德·埃弗森·冯·蔡琴凯滕的电影《安扎尔·德尔·莱尔泽伊辛》一样。

     

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 :(得分:1)

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