C语言 参数传递

编写一个程序,删除每一个输入行末尾的空格及制表符,并删除完全是空格的行。
这边之前已经有了获取一个输入行的函数:

int getline(char *line, int maxline)
{
    char ch;
    int len;
    len = 0;

    while((ch = getchar()) != '\n' && ch != EOF && len < maxline)
    {
        line[len++] = ch;
    }
    line[len]= '\0';
    return len;
}

下面是针对于一行语句进行trim操作,我们函数命名del0char:

int del0char(char *line)
{
    int len = strlen(line);
    //find the first ' ' or '\t'
    char ch = line[--len];
    //printf("len = %d~", len);

    while( (ch == ' ' || ch == '\t') && len >= 0)
    {
        ch = line[--len];
    }
    //if the last char of line is blank,then change something
    if(line[len+1] == ' ')
        line[len+1] = '\0';
}

然后在主方法中做测试:

int main(int argc, char *argv[])
{
    char lines[MAXLEN][MAXLINE];
    char line[MAXLINE];
    int len ;
    int j;
    int i = 0;
    while((len = getline(line, MAXLINE)) != 0)
    {
        printf("before: %s~\n", line);
        del0char(line);
        strcpy(lines[i++], line);   
    }
    //press twice 'enter' exit the program
    for(j = 0; j< i; j ++)
    {
        printf("finally: %s~\n",lines[j]); 
    }
}

其中

#define MAXLEN 100
#define MAXLINE 100

测试结果:
测试结果
字符串的倒序操作:

//reverse the string
void reverse(char *s)
{
    int len;
    int i,j;

    len = strlen(s);
    i = 0;
    j = len -1;

    for(; i < j; i++,j--)
    {
        swap(s, i, j);
    }
}

int main(int argc, char *argv[])
{
    char line[MAXLEN];
    int len ;

    while((len = getline(line, MAXLINE)) > 0)
    {
        reverse(line);
        printf("%s\n",line);
    }
    return 0;
}

test result:
这里写图片描述
当然,网上有很多的这样的类似字符串倒序算法。

//decode the '\t' to blank
void detab(char *line, char *newLine, int len)
{
    int i ,j ;

    for(i = 0,j=0; i<len; i++)
    {
        if(line[i] == '\t')
        {
            //calculate the number of blank, and print them into memory 
            int k = 8-i%8;
            while(k>0)
            {
                newLine[j++] = ' ';
                k--;
            }
        }else
        {
            newLine[j++] = line[i]; 
        }
    }
    newLine[j] = '\0';
}

这边是这样子的,把制表符‘\t’置换成一定数量的空格。上面中我们可以把制表符的长度8置换成常量。现在我们反过来编写将一定数量的空格改写成制表符,尽管在显示上看起来是没有什么样的任何变化的,实际上制表符的所用内存就会是少了很多。

猜你喜欢

转载自blog.csdn.net/qungxue/article/details/52942899