C语言之数组和字符串

  1. 数组的使用
//----对一维数组的输入

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的长度足够大.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值