字符数组知识小结

字符数组知识小结

字符数组的定义和引用

   1. 定义格式 char 数组名[数组元素] 【={元素初值列表}】如char a[8]={‘G’,‘o’,‘o’,‘d’}初始化时数组元素小于定义数,则后面自动补ASCLL为0的’\0’初始化元素不能大于定义数否则会出错
2. 可以去掉定义时的元素数直接定义char a[ ]={‘i’,‘l’,‘i’,‘k’,‘e’}数组长度为5,后面不会加字符串结束符’\0’也可以用以下方式定义char x[ ]={“I am a student .”;} char x[ ]=“I am a student .”;
3. 字符数组的引用 数组名[下标]
4. 字符串常量和字符数组 字符串通常整体处理,字符数组中如果没有字符串结束符’\0’,不能当作字符串使用,否则可能出错;字符数组可以用来存放字符串常量,此时数组的元素个数应大于或等于字符串的长度加一。

字符数组的输入输出

  1. 可以用%c逐个字符输入到字符数组,然后输出
  2. 可以用格式串%s指定格式,由于字符数组的首地址与第一个元素地址一致,故可以直接用数组名做输入项整体输入字符串。由于是整体输入,所以在字符串末尾系统自动加上’\0’。当遇到” 空格“ “\t” ," \n",“enter键”,字符数组会自动结束;当遇到带空格的字符串时,可以用gets()函数处理。字符串的输出:数组长度大于字符串长度,遇到第一个’\0’结束。如果没有’\0’用"%s"格式输出数组时会内存中该数组的内容一并输出,知道遇到’\0’结束。此时最好用%c格式输出。

字符串处理函数

  1. puts(字符串) 将字符串输出到终端
  2. gets(字符数组) 输入一行字符序列到字符数组,返回数组首地址
  3. strcat(字符数组,字符串) 将字符串连接到数组中的串后面,返回数组首地址
  4. strcmp(字符串1,字符串2) 两个字符串比较,返回比较结果(逐个进行ASCLL值的比较,s1>s2,返回争执,s1=s2,返回0,s1<s2,返回负值)
  5. strcpy(字符数组,字符串) 复制字符串到字符数组,返回字符数组首地址
  6. strlen(字符串) 测字符串长度,返回字符串长度。
  7. strwr(字符串) 将字符串大写字母转换成小写,返回该串首地址。
  8. strpr(字符串) 将字符串小写字母转换成大写,返回该串首地址。

字符串函数的应用

#include<stdio.h>
#include<string.h>
int main(void)
{
	char s1[20]="abcde",s2[10]="123456";
	puts(strcat(s1,s2));
	printf("%d %d\n",strlen(s1),strcmp(s1,s2));
	gets(s1);
	printf("%d %d\n",strlen(s1),strcmp(s1,s2));
	puts(strcpy(s1,s2));
	printf("%d %d\n",strlen(s1),strcmp(s1,s2));
	gets(s1);
	puts(strcat(s1,s2));
}
输出:
abcde123456
11 1
wxyz
4 1
123456
6 0
ab
ab123456

--------------------------------
Process exited after 38.77 seconds with return value 0
请按任意键继续. . .

特大整数的精确相加

#include<stdio.h>
#include<string.h>
int main(void)
{
	char a[101],b[101];
	int i,j,k,m,n;
	scanf("%s",a);
	scanf("%s",b);
	m=strlen(a);
	k=n=strlen(b);
	if(m>k) k=m;	//k是两个字符串长度的最大值 
	for(i=0;i<k;i++)
		a[k-i]=a[m-i-1];  //使数组a的字符串a[k]右对齐
		for(i=0;i<=k-m;i++)
		a[i]='0';		//使数组a最高位补零 
	for(i=0;i<=k;i++)
		b[k-i]=b[n-i-1];	//使数组b的字符串以b[k]右对齐 
	for(i=0;i<=k-n;i++) 
		b[i]='0';			//使数组b的高位补0 
	j=0;
	for(i=0;i<k;i++)
	{
		j=a[k-i]+b[k-i]+j-96;  //字符转换为整数相加,再加低进位,赋给j
		a[k-i]=j%10+48;		//j整除10的余数转化为字符 
		j=j/10; 			//j整除10的商,作为本位的进位数 
	}
	if(a[0]=='0')
		printf("%s\n",a+1);
	else printf("%s\n",a); 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值