首页 > 编程语言 >信息学奥赛初赛天天练-45-CSP-J2020阅读程序1-字符数组默认值、字符串长度、字符数组长度、ASCII码应用

信息学奥赛初赛天天练-45-CSP-J2020阅读程序1-字符数组默认值、字符串长度、字符数组长度、ASCII码应用

时间:2024-07-12 18:28:02浏览次数:13  
标签:字符 26 encoder 数组 decoder 字符串 长度 st 输入

PDF文档公众号回复关键字:20240712

在这里插入图片描述

2020 CSP-J 阅读程序1

1阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)

01 #include <cstdlib>
02 #include <iostream>
03 using namespace std;
04 
05 char encoder[26] = {'C','S','P',0};
06 char decoder[26];
07
08 string st;
09 
10 int main()  {
11   int k = 0;
12   for (int i = 0; i < 26; ++i)
13     if (encoder[i] != 0) ++k;
14   for (char x ='A'; x <= 'Z'; ++x) {
15     bool flag = true;
16     for (int i = 0; i < 26; ++i)
17       if (encoder[i] ==x) {
18         flag = false;
19         break;
20      }
21      if (flag) {
22        encoder[k]= x;
23        ++k;
24      }
25  }
26  for (int i = 0; i < 26; ++i)
27     decoder[encoder[i]- 'A'] = i + 'A';
28  cin >> st;
29  for (int i = 0; i < st.length( ); ++i)
30    st[i] = decoder[st[i] -'A'];
31  cout << st;
32  return 0;
33 }

判断题

16.输入的字符串应当只由大写字母组成,否则在访问数组时可能越界( ) [1.5分]

17.若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样( ) [1.5分]

18.将第 12 行的“i < 26”改为“i < 16”,程序运行结果不会改变( ) [1.5分]

19.将第 26 行的"i < 26”改为“i < 16”,程序运行结果不会改变( ) [1.5分]

20.若输出的字符串为“ABCABCABCA”,则下列说法正确的是( ) [3分]

单选题

20.若输出的字符串为“ABCABCABCA”,则下列说法正确的是( ) [3分]

A.输入的字符串中既有S又有P

B.输入的字符串中既有S又有B

C.输入的字符串中既有A又有P

D.输入的字符串中既有A又有B

21.若输出的字符串为“CSPCSPCSPCSP”,则下列说法正确的是( ) [3分]

A.输入的字符串中既有P又有K

B.输入的字符串中既有J又有R

C.输入的字符串中既有J又有K

D.输入的字符串中既有P又有R

2 相关知识点

1) 字符数组

在 C 语言中,当部分初始化一个数组时(即没有为所有元素提供初始值),未明确初始化的元素将被自动赋值为 0

char encoder[26] = {'C','S','P',0};
//数组实际存储值为
{'C', 'S', 'P', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

2) 字符串长度

#include<bits/stdc++.h>
using namespace std;
/*
  通过length()函数获取字符串长度 
*/ 
int main(){
	string st="abcdef";
	cout<<st.length();//字符串st的长度为6 
	return 0;
}

3) 字符数组长度

#include<bits/stdc++.h>
using namespace std;
char encoder[] = {'C','S','P',0};
/*
  字符数组长度 
*/ 
int main(){
	/*
	  sizeof 求变量内存占用字节数
	  sizeof(encoder) 数组encoder占用字节数,数组中每个元素都是相同类型,占用字节相同 
	  sizeof(encoder[0])数组第一个元素占用字节数
	  sizeof(encoder) / sizeof(encoder[0]) 数组元素个数 
	*/ 
	int length =sizeof(encoder) / sizeof(encoder[0]); 
	cout<<"字符数组encoder元素个数:"<<length; //输出4 ,encoder有4个元素 
	return 0;
}

4) ASCII 码

字符是一种图形符号,不同国家不同地区都有自己特殊的字符,于是就衍生了“字符集合”这个名词。其中ASCII (American Standard Code for Information Interchange: 美国信息交换标准代码)是国际通用的标准字符集

例如

char a='0';
char b='P';
char c='@';
char c='65';//ascii 码 对应大写字母A

3 思路分析

1) k值更新

/*
  由于encoder数组前面3个字符不是0,所以k被累加3次,累加后k的值为3
*/
05 char encoder[26] = {'C','S','P',0};

11   int k = 0;
12   for (int i = 0; i < 26; ++i)
13     if (encoder[i] != 0) ++k;

2) 填充encoder数组

14   for (char x ='A'; x <= 'Z'; ++x) {//循环填入A~Z 26个大写字母
15     bool flag = true;
16     for (int i = 0; i < 26; ++i)
17       if (encoder[i] ==x) {//26个大写字母是否被填过
18         flag = false;
19         break;
20      }
21      if (flag) {//没填过,填入当期位置
22        encoder[k]= x;
23        ++k;
24      }
25  }

填入对应字符后encoder数组值如下

3) 填入decoder数组

存储encoder元素字母位置对应的ASCII

比如C字母对应ASCII为2,位置为0,对应字母为A,因此在encoder2位置存放A

 for (int i = 0; i < 26; ++i)
    decoder[encoder[i]- 'A'] = i + 'A';

填入对应字符后decoder数组值如下

4) 根据位置decoder查

根据输入字母的位置到decoder数组查

28  cin >> st;
29  for (int i = 0; i < st.length( ); ++i)
30    st[i] = decoder[st[i] -'A'];

判断题

16.输入的字符串应当只由大写字母组成,否则在访问数组时可能越界( T ) [1.5分]

分析

如果输入的是小写字母a则st[i] -‘A’=97-65=32

decoder[st[i] -‘A’]=decoder[32] 超出数组下标,数字会越界

17.若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样( F ) [1.5分]

分析

由于前面CSP这3个字母打乱了,但从下标19以后,字母顺序就相同了,因此输入的是19~25这些字符,输出也是这些字符

输入和输出有可能一样,所以错误

18.将第 12 行的“i < 26”改为“i < 16”,程序运行结果不会改变( T ) [1.5分]

分析

12行主要是看encoder数组不为0的字符下标累加,encoder数组就前面CSP3个字符,因此26和16都可以正确累加,因此运行结果不变

12   for (int i = 0; i < 26; ++i)
13     if (encoder[i] != 0) ++k;

19.将第 26 行的"i < 26”改为“i < 16”,程序运行结果不会改变( F ) [1.5分]

分析

26行是对decoder进行填充,需要填充26个位置对应字母,如果只到16,只能填充16个字母,根据不同输入,如果用到没被填充的字母,则结果会改变

26  for (int i = 0; i < 26; ++i)
27     decoder[encoder[i]- 'A'] = i + 'A';

单选题

20.若输出的字符串为“ABCABCABCA”,则下列说法正确的是( A ) [3分]

A.输入的字符串中既有S又有P

B.输入的字符串中既有S又有B

C.输入的字符串中既有A又有P

D.输入的字符串中既有A又有B

分析

根据字符的位置去查decoder数组,具体如下图

如果输出为A则需要decoder下标为2,st[i] -‘A’=2 所以st[i] 为字母C

如果输出为B则需要decoder下标为18,st[i] -‘A’=18 所以st[i] 为字母S

如果输出为C则需要decoder下标为15,st[i] -‘A’=15 所以st[i] 为字母P

输入的字符为CSPCSPCSPC,所以选A

29  for (int i = 0; i < st.length( ); ++i)
30    st[i] = decoder[st[i] -'A'];

21.若输出的字符串为“CSPCSPCSPCSP”,则下列说法正确的是( D ) [3分]

A.输入的字符串中既有P又有K

B.输入的字符串中既有J又有R

C.输入的字符串中既有J又有K

D.输入的字符串中既有P又有R

分析

根据字符的位置去查decoder数组,具体如下图

如果输出为C则需要decoder下标为15,st[i] -‘A’=15 所以st[i] 为字母P

如果输出为S则需要decoder下标为17,st[i] -‘A’=17 所以st[i] 为字母R

如果输出为P则需要decoder下标为13,st[i] -‘A’=13 所以st[i] 为字母N

输入的字符为PRNPRNPRNPRN,所以选D

标签:字符,26,encoder,数组,decoder,字符串,长度,st,输入
From: https://blog.csdn.net/ya888g/article/details/140385297

相关文章

  • 字符集相关知识
    什么是字符集?字符集又称字符编码,在计算机中所有数据都是二进制形式,包括abc@#$。字符编码规定了用哪些二进制数表示哪些符号。 ASCII编码单字节表示法,有一个扩充bit,另外7bit可以表示128个字符,其中有33个控制和95个可显示字符。 helloworldASCII68656C6C6......
  • 数组的基本知识
    数组的定义数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。(从0开始)数组声明创建首先必须声明数组变量,才能在程序中使用数组。下面是声明数组......
  • 字符串练习-手机号屏蔽
    手机号屏蔽Stringsubstring(intbeginindex;intendindex)Stringsubstring(intbeginindex)需要一个返回值来接收截取结果Strings="";包头不包尾,包左不包右。从beginindex开始截取所有结果应用:该方法的作用是截取字符串。屏蔽数字时可用。应用练习pub......
  • jmetter 后置处理器 针对需要提取数组里的多个值 处理方式
    1.通过正则/Json提取器,提取整个数组值2.在增加JSR223PostProcessor后置处理器,可以方便编写简单处理脚本 选择自己熟悉的语言,jython需要下载jar包,放在jmeterlib目录下 3.脚本里用vars.get()获取之前提取器提取的数组值jmater参数都是json串格式,所以后面处理提取......
  • Oracle、达梦:拼接数组数据为一行
    一、普通拼接1、需求oracle查询的数据是:value1123怎么获取:1/2/32、实现value1:是要拼接的字段value2:是表中的任意字段-可用于排序的字段,也可以是value1--使用LISTAGG函数将多行数据连接成一个字符串,以'/'作为连接符SELECTLISTAGG(value1,'/')......
  • #BAS3123. 【例21.3】 字符类型判断
    3123:【例21.3】字符类型判断【题目描述】输入一个字符,判断该字符是否大写字母、小写字母、数字字符或其他字符。分别输出对应的提示信息。【输入】输入为一个字符。【输出】如果该字符是大写字母,则输出" upper ";若是小写字母,则输出" lower ";若是数字字符,则输出" di......
  • 双指针法,高效移除数组特定值(思路+实现)
    题目①双指针解决本题的思路1.明确双指针slow、fast的作用:1_1.slow:数组该更新的位置,“新数组”(最终数组)的个数。 注意:本题新数组可以不需要辅助空间,而下一篇文章(有序数组的平方,就需要辅助数组)1_2.fast:遍历原数组(初始数组)2.双指针工作原理:(T是我们要删除的元素......
  • 利用Python实现分析给定文本字符串中的字符统计信息
    设计一个名为TextAnalyzer的Python类,该类用于分析给定文本字符串中的字符统计信息。类应具有以下功能:初始化:类初始化时接受一个字符串参数text,并将其存储为类的属性。字符计数:实现一个方法count_characters(),返回一个字典,其中键为文本中出现的不同字符(包括空格和标点符......
  • Day9(栈与队列) | **232.用栈实现队列** **225. 用队列实现栈** **20. 有效的括号**
    232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素booleanempty()如果队列为......
  • js 数组方法 - 查找 - indexOf()、includes()、find()、findIndex()、filter()、lastI
    indexOf()该方法可以返回数组中指定元素的索引,如果不存在,则返回-1。constarr=["apple","banana","orange"];constindex=arr.indexOf("banana");console.log(index);//输出:1constarr2=["aaa","bbb","ccc",9......