题目:
现在有一个字符串,编写一个函数能够删除字符串中的空格字符。
思路:
删除字符串的空格,需要一个指针point来遍历字符串,一个指针LinkPoint来指向需要添加值的地方。当第一次找到空格时,将该位置point赋值给LinkPoint。然后每找到一次非空格的值就赋给LinkPoint位置,之后LinkPoint向后移动一位,指向下一次非空格值的赋值位置。
注意点:
- 对于字符串,需要注意' \0 ',' \0 '是非空格值,但它是结束符,所以要特殊处理。
- 对于字符串,操作之后要在最后手动加上' \0 '结束符
代码实现如下:
#include <stdio.h>
#include <string.h>
void StrDelBlank(char* str){
char* point = str;//数据遍历位置
char* LinkPoint = str;//链接位置
char FirstKongGeFlag = 0;//第一次找到空格
char DebugI = 0;
//1.判断是否传入参数有误
if(point == NULL){
printf("err:str is NULL \n");
return;
}else{
printf("Head Address = %#x\n",point);
}
//2.遍历
while(*point!='\0'){
printf("Debug:%d\n",DebugI++);
printf("Debug:point = %#x\n",point);
printf("Debug:LinkPoint = %#x\n",LinkPoint);
printf("Debug:Now char is %c\n",*point);
//第一次发现空格
if(*point == ' ' && FirstKongGeFlag == 0){
FirstKongGeFlag = 1;
LinkPoint = point;
printf("Debug:first find ' '\n");
}
//当前不是空格且找到了链接位置,进行链接
if(*point!=' ' && *point!='\0' && FirstKongGeFlag==1){
printf("Debug:Link *point to *LinkPoint\n");
*LinkPoint = *point;
*point = ' ';
LinkPoint++;
}
point++;
printf("\n");
}
*LinkPoint = '\0';//补充末尾'\0'
}
int main(){
char str[] = " ha e l l o";
char strlen1,strlen2;
strlen1 = strlen(str);
StrDelBlank(str);
strlen2 = strlen(str);
printf("before del blank,strlen = %d\n",strlen1);
printf("after del blank,strlen = %d,str = %s\n",strlen2,str);
return 0;
}