字符类型定义、读入、输出、应用

无论数组的下标有几个,类型如何,但数组中全体元素的类型必须相同。数组元素的类型可以是任何类型,当它是字符型时,我们称它为字符数组。由于字符数组与字符类型的应用是计算机非数值处理的重要方面之一,所以我们把它们两个放在一起进行讨论。

 

 

 

  下面我们举例说明字符数组的应用。  

一、字符类型 

  字符类型为由一个字符组成的字符常量或字符变量。  

字符常量定义:

   const 

      字符常量=‘字符’

例如:const x=’a’;//表示定了一个字符常量x,x的值为字符a  

字符变量定义:

       char 字符变量;   

例如:char x; //表示定义了一个字符变量x

  字符类型是一个有序类型, 字符的大小顺序按其ASCⅡ代码的大小而定。

有很多版本,请读者仔细阅读。

 

(1)定义

数组中的每个元素都是一个字符的数组称为“字符数组”。有时,把一维字符数组又称为“字符串”。定义字符数组的方法与定义其他类型数组的方法类似。

对于字符数组的定义

char s[10] = {'H','e','l','l','o'};

其在计算机内部的存储方式如下:

image.png

也就是说,字符串的末尾都会有一个空字符'\0'。

(2)字符数组赋值方法

用字符常量逐个初始化:char letter[5]={'a','e','i','o','u'};

用赋值语句逐个元素赋值:letter[0]='a';…

用 scanf 读入整个数组:scanf ("%s",letter);

用 scanf 逐个元素读入:scanf ("%c",&letter[0]);…

用 cin 输入整个数组:cin >> letter;

用 cin 逐个元素输入:cin >> letter[0];…

用 gets 读入整个数组:gets(letter);

用 getchar 逐个读入:letter[0]=getchar();…

(3)字符数组输出方法

用 cout 输出整个数组:cout >> letter;

用 cout 逐个元素输出:cout >> letter[0];…

用 printf 输出整个数组:printf ("%s",letter);

用 printf 逐个元素输出:printf ("%c",letter[0]);…

用 puts 输出整个数组:puts(letter);

用 putchar 逐个元素输出:putchar(letter[0]);…

PS:计算字符数组的长度,使用strlen()函数;

例如:char a[205];

strlen(a)为计算字符数组a目前存储字符的总长度

第1题     习题1 数字和 查看测评数据信息

【问题描述】

输入一个整数 n,求各位上的数字和。

【输入格式】

一行一个整数 n,n 最多 200 位。

【输出格式】

一行一个整数,表示整数 n 的各位数字之和。

【输入样例】

1234

【输出样例】

10

【问题分析】

由于n可能到200位,任何整数类型都是不可能存储的。因此,定义一个一维字符数组读取、存储这个超大数,然后把每个字符转换成数值累加求和。

#include<bits/stdc++.h>
using namespace std;
int main(){
    string a;
	getline(cin,a);
	int num=0;
	for(int i=0;i<a.size();i++){
		num+=a[i]-48;
	} 
	cout<<num;
    return 0;
}
第2题     习题2 乘法 查看测评数据信息

做厌了乘法计算题的佳佳,自创了一种新的乘法运算法则。在这套法则里,A×B等于一个取自A、一个取自B、的所有数字对的乘积的和。

例如:123×45等于1×4+1×5+2×4+2×5+3×4+3×5=54。

本题的任务是,对于给定的数A和B,用新的乘法法则计算A×B的值。

【输入格式】

一行两个用一个空格隔开的整数A和B,1≤A、B≤10^9。

【输出格式】

一行一个整数,表示新的乘法法则下A×B的值。

【输入样例】

123 45

【输出样例】

54

#include<bits/stdc++.h>
using namespace std;
long long a,b,d[10],e[10],i=0,j=0,k,l,sum=0;
int main(){	
	scanf("%d%d",&a,&b);
	while(a){	
		d[i++]=a%10;
		a/=10;
	}
	while(b){	
		e[j++]=b%10;
		b/=10;
	}
	for(k=0;k<i;k++)
	   for(l=0;l<j;l++)
	     sum+=(d[k]*e[l]); 
	printf("%d\n",sum); 
	return 0;
}
第3题     习题3 比分(score) 查看测评数据信息

小花在乒乓球馆里最喜欢一个叫樊振东的选手,今天它趴在窗户上看了一下午他们的训练,直到被打扫卫生的大叔赶走。小花的记性非常好,能够记录一整个下午的比赛情况,比如它记录的情况是(其中 F 表示樊振东选手获得一分,A 表示樊振东的对手获得一分):FFFFFFFFFFFFFFFFFFFFFFAF。在当前的赛制下,此时比赛的结果是樊振东第一局 11 比 0 获胜,第二局 11 比 0 获胜,正在进行第三局,当前比分 1 比 1。

因为小花看得太全神贯注了,完全没有注意比分,以至于它完全不知道一下午的具体比分,于是小花找了它的好朋友编程兔来帮忙。可是编程兔去挖萝卜了,于是小花来求助聪明的小朋友们。

你的程序就是要对于一系列比赛信息的输入(FA 形式),输出正确的结果。注:

当前使用的是 11 分制,到 10 平后,需要胜出 2 分后,才算胜,如:12:10;

17:15 等。

如果一局比赛刚开始,则此时比分不必输出。

【输入格式】

输入数据每行至多 20 个字母,行数可能很多,最多可能有 10000 行。

输入格式:

输入包含若干行字符串(每行至多 20 个字母),字符串由大写的 F、A 和 E 组成。其中 E 表示比赛信息结束,程序应该忽略 E 之后的所有内容。

【输出格式】

输出有若干行,每一行对应一局比赛的比分(按输入顺序)。

输入样例:

FFFFFFFFFFFFFFFFFFFF 

FFAFE

【输出样例】

11:0

11:0

1:1

【样例说明】

前 11 分都是 F,所以第一局 11:0,之后 11 分也都是 F,所以第二句也是 11:0,最后两分分别是 A 和 F,所以是 1:1,E 表示结束。

【数据规模】

每行最多有 20 个字符,只有 F、A 和 E 三种字母,没有其他多余的字母。对于 30%的数据,输入只有一行。

对于 60%的数据,输入不超过 10 行。

对于 100%的数据,输入数据不超过 10000 行。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=22;
char str[MAXN];
int main(){
    int i,a,b,flag;
    a=0,b=0,flag=0;
    while(~scanf("%s",str)){
        for(i=0;str[i];i++){
            if(str[i]=='E'){
				flag=1;
				break;
			} 
            else if(str[i]=='F')a++;
            else if(str[i]=='A')b++;          
            if(a>=10&&b>=10){
                if(abs(a-b)>=2){
					printf("%d:%d\n",a,b);
					a=b=0;
				}
            }
            else if(a==11&&b<10){
				printf("%d:%d\n",a,b);
				a=b=0;
			}
            else if(b==11&&a<10){
				printf("%d:%d\n",a,b);
				a=b=0;
			}
        }
        if(flag){                       
            if(a||b)printf("%d:%d\n",a,b);   
            break;
        }
    }
    return 0;
}
第4题     习题4 过滤多余的空格 查看测评数据信息

一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。

【输入格式】

一行,一个字符串(长度不超过200),句子的头和尾都没有空格。

【输出格式】

过滤之后的句子。

【输入】

Hello      world.This is    c language.

【输出】

Hello world.This is c language.

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s1,s2;
	getline(cin,s1);
	for(int i=0;i<s1.size();i++){
		if(s1[i]!=' '){  
			s2+=s1[i];  
	 } 
    else if(s1[i+1]!=' '){  
			s2+=s1[i]; 
		}
	}
	cout<<s2;
    return 0;
}
附加题1 出现第一次的字符 查看测评数据信息

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

【输入】

    一个字符串,长度小于100000(使用两层循环时,如果找到两个及以上的相同符号跳出循环就不会超时)。

【输出】

    输出第一个仅出现一次的字符,若没有则输出no。

【样例输入】 

abcabd                   

【样例输出】

 c

#include<bits/stdc++.h>
using namespace std;
int main(){
	char str[100000],a[26]={0};
	cin>>str;
	long len=strlen(str);
	for(int i=0;i<len;i++)
		a[str[i]-'a']++;
	for(int i=0;i<len;i++)
		if(a[str[i]-97]==1){
			cout<<str[i];
			return 0;
		}
	cout<<"no";
    return 0;
}
第2题     附加题2 猜拳游戏  查看测评数据信息

石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。 

    游戏规则:石头打剪刀,布包石头,剪刀剪布。 

    现在,需要你写一个程序来判断石头剪子布游戏的结果。

【输入格式】

    第一行是一个整数N,表示一共进行了N次游戏。1 <= N <= 100。

    接下来N行的每一行包括两个字符串,表示游戏参与者Player1,Player2的选择(石头、剪子或者是布):

    S1 S2

   字符串之间以空格隔开S1,S2只可能取值在{"Rock", "Scissors", "Paper"}(大小写敏感)中。

【输出格式】

    输出包括N行,每一行对应一个胜利者(Player1或者Player2),或者游戏出现平局,则输出Tie。

【样例输入】                                       :

    3                                                         

    Rock Scissors                                     

    Paper Paper                                        

    Rock Paper   

【样例输出】

 Player1

Tie

Player2

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a[101],b[101];
    int n,i; 
    cin>>n;
    for(i=0;i<n;i++){
        cin>>a>>b;
        if(a[0]=='R'&&b[0]=='S'||a[0]=='S'&&b[0]=='P'||a[0]=='P'&&b[0]=='R')//判断第一个字母即可
            cout<<"Player1"<<endl;
        else if(a[0]==b[0])
            cout<<"Tie"<<endl;
        else
            cout<<"Player2"<<endl;
    }
    
    return 0;
}

  • 45
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值