把字符串倒序并把非字符剔除掉:
这个要求其实很简单的,我开始是想用传进去的*str直接把结果带出来,所以代码结构比较复杂,后面看到要参数是const后,才临时改成malloc存储空间返回结果。
结果就是使用malloc的时候踩了个小坑: strcpy复制字符串的时候,复制的总数会比字符串长度多1,也就是结束符‘\0’,而我malloc的时候,是按照strlen的结果来malloc的,这就导致strcpy的时候内存越界了,代码运行某些测试用例才会报错。后面仔细查看才找到原因。。。 改成malloc(length+1)
char *reverse_letter(const char *str)
{
char *p ;
int length = strlen(str);
int cur = length - 1;
int i;
char *pstr = (char*)malloc(length+1);
strcpy(pstr, str);
p = pstr;
while(p <= &pstr[cur])
{
if(pstr[cur] < 'a' || pstr[cur] > 'z')
{
/*Move the letter after*/
for(i=cur; i<length-1; i++)
{
pstr[i] = pstr[i+1];
}
cur --;
length --;
continue;
}
/*Swap*/
char c = *p; *p = pstr[cur]; pstr[cur] = c;
if(pstr[cur] < 'a' || pstr[cur] > 'z')
{
/*Move the letter after*/
for(i=cur; i<length-1; i++)
{
pstr[i] = pstr[i+1];
}
length --;
}
cur --;
p ++;
}
pstr[length] = 0;
return pstr;
}