- 数组的使用
//----对一维数组的输入
int a[5],i;
//数组必须先定义后使用,且在定义时,必须指定数组的长度。比如这里不能这样 int a[].
for(i=0;i<5;i++)
scanf("%d",&a[i]);
//这里i<5是给他限定输入数据个数的范围,也就是当输入这么多数据后,系统不再接收数据
//由于数组元素存储类型为int,所以在输入一个数据后,想要输入下一个数据,可以进行空格或者换行等非整形变量操作,但当char时未必。
/*****************************************
任意输入一段字符,输出各个大写字母的个数
********************************************/
#include <stdio.h>
#include<cstdlib>
#include <string.h>
int str[26];
int main()
{
char ch;
int i;
memset(str,0,26*sizeof(int));
while ((ch=getchar())!='\n')
{
if('A'<=ch&&ch<'Z')
str[ch-'A']++;
}
for(i=0;i<26;i++)
{
printf(" %c(%d)",'A'+i,str[i]);
if ((i+1)%7==0)
printf("\n");
}
printf("\n");
system("pause");
return 0;
}
//----对二维数组的输入
int a[2][3],i,j;
for(i=0;i<2;i++) //一维数组的注释同样类似于二维数组
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
2.字符串
字符串:是一种以’\0’结尾的字符数组,’\0’作用是标识字符的结束。
//eg:下面三种表示方式是等价的,其数组长度均为6
char str[]="china";
char str[]={"china"};
char str[]={'c','h','i','n','a','\0'};
//但不等价于
char str[]={'c','h','i','n','a'}; //数组长度为5
补充:
1:字符实际上就是整形数据,但只占1字节内存单元,用于存储该字符所对应的ASCII码值。
其包括:1)常用字符,即直接输入的用单引号括起来表示的。如’A’,’b’,’+’;
2)转义字符,以\开头具有特定含义的。如\absnrtv;\ddd(d是1~3位八进制字符),\xhh(h是1~2位十六进制字符),它们均为ASCII码。
2.字符串:由双引号括起来的字符序列,且以’\0’为结束标志。
字符串存放形式如下:
3.字符串跟字符数组不是一回事!我们讲的只是把字符串放在字符数组中!
这里的字符串是”china”,而字符数组为str。
亦可以直接定义数组长度:
char str[10]="china"; //数组长度为10,未指定单元字符为NUL,其ASCII码值为0
//等价于
char str[10]={'c','h','i','n','a'}
字符数组内存映像表示如下:
下面简要说明 字符串操作常用函数
1.字符串的输入
1)gets :接收键盘的输入,将输入的字符串存放在字符数组中,指导遇到回车符时返回,其中回车符’\n’转换成字符串结束标志’\0’来存储。
调用格式:gets(字符数组变量名);
eg :
char str[10];
gets(str);
2)scanf :读取输入字符(忽略之前的空格)并保存到字符数组中,遇到空格或者回车符输入操作停止。且会自动在字符串后面加’\0’.
eg:
char str[10];
scanf("%s",str); //这里的str即是数组首地址,故不能写成&str.
//str在输入字符串时使用%s格式控制符.
利用scanf可连续输入多个字符串
char str1[10],str2[20],str3[30];
scanf("%s%s%s",str1,str2,str3);
一般为避免输入的字符串长度超过数组的大小,可用%ns,n表示域宽限制。如果没有遇到空格或者回车符,则在读入n个字符后停止。
eg:
char str[10];
scanf("%9s",str);
//最多可读入9个非空格字符,且str最后一个数据单元添加字符串结束标志'\0'.
2.字符串的输出
1)puts;与gets功能相反
2)printf;使用%s格式控制符,且与%s对应的地址参数字符串某一字符的地址,printf将余下的字符全部输出,其中’\0’不会被输出。
eg:
char name[]="John Smith";
printf("The name is:%s\n",name);
printf("The last name is:%s\n",&name[5]);
输出结果:
The name is:John Smith
The last name is:Smith
3.字符串的长度(以下三个字符串操作要包含的.h文件为string.h)
调用格式:strlen(字符串地址);
功能:返回字符串的长度,即从给定的字符串的起始地址开始到第一个’\0’为止。
eg:
char str[]="0123\0456789";
printf("%d",strlen(str)); //输出结果为9,\045看做转义字符
printf("%d",strlen(&str[5])); //输出结果为4
注:若没有’\0’,则上面输出结果为10,5.
4.字符串的复制
调用格式:strcpy(数组1变量名,数组2变量名);
功能:将字符串2复制到字符串1中去(数组1的大小必须足够大以便能存放2的所有字符,包括’\0’)
5.字符串的比较
调用格式:strcmp(字符串1,字符串2);
功能:字符串的大小不能用”>”“<”“==”,看起来比较的是字符,实际上逐个比较的是每个字符的ASCII码值。
若1>2,则返回一个正整数,若1<2,则返回一个负整数,若=,则返回0.
6.字符串的连接
调用格式:strcat(数组1变量名,数组2变量名);
功能:将字符串2连接到字符串1的后面,包括结尾符’\0’.要保证字符数组1的长度足够大.