C语言 字符串

本文深入讲解C语言中字符串的定义、初始化方式及常见操作函数,如strcpy、strcat、strlen等,通过实例演示如何使用这些函数,并提供了一个统计字符串中不同字符类型的示例程序。

字符串

在C语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。
下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符(’\0’)
,所以字符数组的大小比单词 “Hello” 的字符数多一个。

 char str[6]={'h','e','l','l','o','\0'};//   '\0'为结束符号
 //也可以这样初始化
 char str[6]="hello"

由此引出单引号和双引号的区别:
‘a’ 表示是一个字符,“a” 表示一个字符串相当于 ‘a’+’\0’;
‘’ 里面只能放一个字符;
“” 里面表示是字符串系统自动会在串末尾补一个 0。

str[0]str[1]str[2]str[3]str[4]str[5]
hello\0

~~如果这样定义:

char str[5]="hello";~

~~这样的定义是错误的。在vs2010下会出现“数组界限溢出”的错误~

//也可以省略常量表达式
char str[]="hello";
//编译器会自动添加'\0',并且认为[ ]中为6
//也就是说str数组的字节数为6

C 中有大量操作字符串的函数:

gets(str);//输入一串字符给s
puts(str);打印字符串s
也可以用scanf和printf进行输入和输出
scanf("%s",str);//对于字符串而言不用添加&,因为str就表示他的地址
printf("%s",str);

序号函数作用
1strcpy(s1, s2);复制字符串 s2 到字符串 s1
2strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾
3strlen(s1);返回字符串 s1 的长度
4strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0;

这些函数均在string.h的头文件下。
简单的使用一下这些函数:

#include<string.h>//如果不添加此头文件,会出现" 找不到标识符"的错误
int main()
{
	char a[20]="hello";
	char b[10];
	char c[20]="world";
	char d[]=" ";
	printf("%d\n",strcmp(a,c));
	strcpy(b,a);
	puts(b);
	strcpy(b,c);
	puts(b);
	puts(a);
	printf("%d\n",strlen(a));
	strcat(a,d);
	strcat(a,c);
	puts(a);
	printf("%d\n",strlen(a));
	return 0;
}

输出结果:
-1
hello
world
hello
5
hello world
11
例:输入一个字符串,统计字母,数字,空格,其他字符个数

#include<string.h>//不加此头文件,会出现“strlen:表示符未定义”
int main()
{
	char ch[20];
	int letter=0,space=0,number=0,other=0,i,len;
	gets(ch);
	len=strlen(ch);
	for(i=0;i<len;i++)
	{
		if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z'))
			letter++;
		else if(ch[i]==' ')
			space++;
		else if(ch[i]>'0'&&ch[i]<'9')
			number++;
		else
			other++;
	}
	printf("字母:%d",letter);
	printf("数字:%d",number);
	printf("空格:%d",space);
	printf("其他:%d",other);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值