0

我需要一个函数,该函数将采用 char *s = "abc def gf ijklmn" 之类的 char 指针。如果它通过函数 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”

4

2 回答 2

1

有2个问题

  1. 重置space为循环0while

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

    strcpy(s, sp);

代替

s = sp;

strcpy当没有东西可以修剪时,长度sp应该是最大长度是安全的。s

于 2013-05-06T05:51:42.260 回答
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);
}
于 2013-05-06T05:44:43.783 回答