C语言——删除字符串中的空格

编写删除字符串空格的函数
博客主要围绕编写一个函数展开,该函数的功能是删除字符串中的所有空格,还提及了其它方法及运行结果,属于信息技术中程序设计相关内容。

题目:编写一个函数,函数功能是删除字符串中的所有空格。

代码:

#include<stdio.h>
#include<ctype.h>
void fun(char *str)
{
	char *str_c=str;
	int i,j=0;
	for(i=0;str[i]!='\0';i++)
	{
		if(str[i]!=' ')
			str_c[j++]=str[i];
	}
	str_c[j]='\0';
	str=str_c;	
}

int main()
{
	char str[81];
	printf("Input a string : ");
	gets(str);
	puts(str);
	fun(str);
	printf("*** str: %s\n",str);
}

其它方法:

void fun(char *str)
{
	char *p=str;
	int i=0;
	while(*p)
	{
		if(*p!=' ')
			str[i++]=*p;
		p++;
	}
	str[i]='\0';
}

运行结果

<think>嗯,用户这次问的是C语言字符串空格是否算作字符。这个问题其实很基础,但涉及字符串处理的本质概念。 从用户引用的资料来看,ta应该正在学习字符串处理相关的内容,比如引用1中的strip函数就是专门处理空格的。用户可能在实际编程时遇到了空格相关的问题,比如字符串比较异常或长度计算错误。 关于空格是否算字符,核心在于C语言字符串本质:字符串是由字符组成的连续内存块,以'\0'结尾。这里的关键点是: - 空格' '的ASCII码是32(十进制),和字母'A'(65)一样都是合法的char类型值 - 在内存中,空格和其他字符同等存储,比如"a b"实际存储为['a',' ','b','\0'] - 所有标准字符串函数(strlen/strcpy等)都将空格视为有效字符 用户引用的strip函数也印证了这点——它需要专门循环检测空格字符(' ')并移除。如果空格不算字符,这个函数就毫无意义了。 特别要注意的是,fgets函数读入的字符串包含输入时的空格,但会吃掉回车符(引用1的main函数注释提到这点),这进一步说明空格与换行符在字符串中地位不同。 用户可能混淆的点在于:某些输入函数如scanf的%s格式会跳过前导空格(引用2提到输入处理差异),但这只是函数行为,不代表空格不是字符。当字符串存入内存后,空格就是普通字符成员。 最后补充个易错点:字符串字面值里的空格(引用3的续行例子)和转义字符中的空格(引用4的路径字符串)都是有效字符,比如"c:\test"中的空格会直接影响strlen结果。</think>在C语言中,**字符串中的空格被视为有效字符**。以下是详细说明: 1. **本质是ASCII字符** 空格字符`' '`在ASCII表中对应十进制值**32**(十六进制0x20),与其他可见字符(如字母、数字)具有同等地位。例如: ```c char str[] = "Hello World"; // 内存存储: 'H','e','l','l','o',' ','W','o','r','l','d','\0' ``` 2. **影响字符串操作** - **长度计算**:`strlen("a b")` 返回 **3**(包含空格) - **比较函数**:`strcmp("a b", "ab")` 会判定为不同字符串 - **输入输出**:`scanf`/`printf` 会完整保留空格(除非使用`%s`跳过前导空格) 3. **验证示例** ```c #include <stdio.h> #include <string.h> int main() { char s[] = "C program"; printf("长度: %zu\n", strlen(s)); // 输出9(含空格) printf("空格ASCII值: %d\n", s[1]); // 输出32 return 0; } ``` 4. **特殊场景说明** - **字符串字面值**:跨行定义时需用反斜杠`\`续行,否则空格会被保留(引用[^3]) - **输入函数**:`fgets()`会将输入的空格存入字符串(引用[^1]),而`scanf("%s")`会跳过前导空格(引用[^2]) - **转义字符**:`\ `(空格转义)不存在,空格直接写作`' '` > 关键结论:空格字符串的**合法组成部分**,在内存中占用1字节,参与所有字符串操作[^1][^3][^4]。 ### 相关问题 1. C语言中如何区分空格字符和字符串结束符`\0`? 2. 使用`scanf`读取含空格字符串有哪些方法? 3. 为什么`strlen("a b")`的结果是3而不是2? 4. 在文件I/O操作中,空格字符会被特殊处理吗? 5. 如何实现删除字符串中所有空格的函数(如引用[^1]的`strip()`)?
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值