字符数组的学习

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;
}

 

posted @ 2021-11-07 19:35  可莉我的宝  阅读(238)  评论(0)    收藏  举报