我需要一个带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”
答案 0 :(得分:1)
有两个问题
在space
循环中将0
重置为while
。
不要返回sp
,因为它是本地字符数组。您可以在s
中复制字符串。
strcpy(s,sp);
而不是
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);
}