6.C_Demo 数组练习:删除字符串的空格

发布于:2024-08-10 ⋅ 阅读:(148) ⋅ 点赞:(0)

题目:

现在有一个字符串,编写一个函数能够删除字符串中的空格字符。

思路:

删除字符串的空格,需要一个指针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;
}


网站公告

今日签到

点亮在社区的每一天
去签到