函数删除多余的空格,但在char指针中的单词之间留下一个空格

时间:2013-05-06 05:37:46

标签: c function space

我需要一个带char指针的函数,比如char * s =“abc def gf ijklmn”。如果它通过函数int space_remove(char *)传递,它应该返回额外空格的数量并修改字符串并取出额外的空格。

int space_remove(char *s)
{
    int i = 0, ic = 1, r = 0,space = 0;
    //char *sp = (char *) malloc(strlen(s) * sizeof(char));
    char sp[256];
    while (*(s+i) != '\0'){
        if (*(s+i) == ' ' && *(s+i+1) == ' '){
            space = 1;
            r++;
        }
        if (space){
            sp[i] = *(s+i+r);
            i++;
        }

        else if (!space){
            sp[i] = *(s+i+r);
            i++;

        }
        else {
            sp[i] = *(s+i+r);
            i++;
        }
    }
    sp[i+1] = '\0';
    printf("sp:%s \n",sp);
    s = sp;
    //free(sp);
    return r;
}

这里有什么帮助吗?

如果字符串是“abc(10个空格)def(20个空格)hijk”它应该返回“abc(1个空格)def(1个空格)hijk”

2 个答案:

答案 0 :(得分:1)

有两个问题

  1. space循环中将0重置为while

  2. 不要返回sp,因为它是本地字符数组。您可以在s中复制字符串。

    strcpy(s,sp);

  3. 而不是

    s = sp;
    

    strcpy是安全的,因为sp的长度应该在s的最大长度时无法修剪。

答案 1 :(得分:0)

以下是工作代码:

    #include<stdio.h>
int space_remove(char *s)
{
    char *s1=s;
    int count=0;
    while(*s){
        *s1++=*s++; // copy first even if space, since we need the 1st space
        if(*(s-1) == ' '){ //if what we just copied is a space
            while(*s ==' '){
                count++;
                s++; // ignore the additional spaces
            }
        }
    }
    *s1='\0'; //terminate
    return count;
}

void main(int argc, char *argv[]){
    //char *str="hi     how r     u";
    int count=space_remove(argv[1]);
    printf("%d %s",count,argv[1]);
}

修改后的答案:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int space_remove(char *s)
{
    char *s1=malloc(strlen(s)*sizeof(char));
    char *s2=s1; // for printing
    int count=0;
    while(*s){
        *s1++=*s++; // copy first even if space, since we need the 1st space
        if(*(s-1) == ' '){ //if what we just copied is a space
            while(*s ==' '){
                count++;
                s++; // ignore the additional spaces
            }
        }
    }
    *s1='\0'; //terminate
    printf("%s",s2);
    return count;
}

void main(int argc, char *argv[]){
    char *str="hi     how r     u";
    int count=space_remove(str);
    printf("\n%d",count);
}