字符数组的学习
1、字符数组的定义
它相对于我们之前学到普通数组,它能够储存ascll码中的字符,并以整型形式储存。
char str[n];是它的定义, n是数组长度,char是字符的专用类型。
2、字符数组的储存
我们暂时有四种形式 @直接用char a[]={"hello world!"};在字符串已经学过,数组尾巴会有\0,故长度为13;
@利用scanf读取,
如,while(scanf("%c",&a[i++])!='\n');这种需要设定一个暂停符号表示结束读入(scanf("%[^'\n']");一种以后会学的方式,结 果与前面的相同,读到\n结束)
@利用getchar读入,如while(a[i++]=getchar()!='\n')具体的和1差别不大,就不做多余解释
下面这种需要头文件<string.h>
@利用gets输入,此方法用于读取全部字符,它以回车结尾,并会在末尾加上/0,如gets(a);
3字符数组的输出
我们对应2的各种方法,可以得到以下@利用printf("%s",a);能够一次性输出所有的字符
@利用putchar();循环至结尾
@利用puts(a);一次性输出
当特殊时候,我们需要输出特定条件的字符,对于上面我们也可以利用循环再用if语句判断,可以用上len==strlen(a);得到数组长度,但是并不会算上\0,可以放心使用
下面我们用一道例题显示

#include <stdio.h>
#include <string.h> //我们用了方法一的方式输入
#include <math.h> //进制转化时用次方
int main(){
char a[81]; //定义一个数组来储存输入
char b[81]; //将属于16进制的数据读入b;
int cnt=0,sum=0; //cnt储存b数组大小
int i,flag=1; //符号
scanf("%[^'#']",a); //方法一的读入
int len = strlen(a); //得到数组的长度
for(i=0;i<len;i++){
if(a[i]=='-'&&cnt==0){ //如果有符号在最前面就并且后面不会再读入符号了,就将转化结果乘-1;
cnt++;
flag=-1;
}
if((a[i]<='f'&&a[i]>='a')||(a[i]<='F'&&a[i]>='A')){ //属于16进制数据读入b
b[cnt++]=a[i];
}
if(a[i]<='9'&&a[i]>='0')
b[cnt++]=a[i];
}
for(i=0;i<cnt;i++){ //遍历数组b
if(b[i]!='-'){
if(b[i]<='f'&&b[i]>='a')
sum+=(b[i]-'a'+10)*pow(16,cnt-1-i); //将其转化为10进制并由一个整数去储存
if(b[i]<='F'&&b[i]>='A')
sum+=(b[i]-'A'+10)*pow(16,cnt-1-i);
if(b[i]<='9'&&b[i]>='0')
sum+=(b[i]-'0')*pow(16,cnt-1-i);
}
}
printf("%d",sum*flag); //输出结果
return 0;
}

浙公网安备 33010602011771号