数据的组织与处理(1)── 字符数组
1. 学习内容
1.1 参考
- 《程序设计基础》6.1.3 字符数组的定义、初始化和赋值
1.2 参考程序
#include <iostream>
using namespace std;
int main()
{
//字符数组可以直接初始化
char a[] = "hello world"; //不指定数组大小,自动分配长度为12;a[11]为结束符合\0
cout << "length of a: " << sizeof(a)/sizeof(a[0]) << endl; //输出:12
char b[100] = "hello, char array"; //指定数组大小
cout << "length of b: " << sizeof(b)/sizeof(b[0]) << endl; //输出:100
a[0] = 'H'; //直接修改字符数组,注意用的是字符,单引号
cout << a << endl; //输出第一个字符变成了大写H
//字符数组通过输入初始化
// 假定后面两个例子的输入都是"hello world"然后回车
char c[100];
cout << "using cin.getline()..." << endl;
cin.getline(c, 100); //读取最多99个字符,碰过回车结束。输入串中可以包括空格。
cout << c << endl; //输出hello world
cout << "using standard cin..." << endl;
cin >> c; //在确定不需要空格的情况下,建议用这个。
cout << c << endl; //输出hello
}
2. 编程
3. 作业
(知识点:数组初始化)
1、有字符数组char encoder[26] = {'C','S','P',0};
则encoder[2]
, encoder[3]
, encoder[9]
的值分别是?
A. ‘S’, ‘P’, ‘C’ B. ‘S’, ‘P’, 0 C. ‘P’, 0, ‘S’ D. ‘P’, 0, 0
2、以下程序,输出的结果是?( )
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
char encoder[26] = {'C','S','P',0};
int main() {
int k = 0;
for (int i = 0; i < 26; ++i)
if (encoder[i] != 0) ++k;
cout << k << endl;
}
3、以下程序,输出的结果是?( )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cstdlib>
#include <iostream>
using namespace std;
char encoder[26] = {'C','S','P',0};
int main() {
int k = 0;
for (int i = 0; i < 26; ++i)
if (encoder[i] != 0) ++k;
for (char x ='A'; x <= 'Z'; ++x) {
bool flag = true;
for (int i = 0; i < 26; ++i)
if (encoder[i] ==x) {
flag = false;
break;
}
if (flag) {
encoder[k]= x;
++k;
}
}
for (int i = 0; i < 26; ++i)
cout << encoder[i];
}
4、以下程序,输出的结果是?( )
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main() {
char encoder[26] = {'C','H','I','N','A','B','D','E','F','G','J','K','L','M',
'O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char decoder[26];
for (int i = 0; i < 26; ++i)
decoder[encoder[i]- 'A'] = i + 'A';
for (int i = 0; i < 26; ++i)
cout << decoder[i];
}
【CSP 2020 入门组第一轮 q16】阅读程序(程序输入不超过数组或字符串定义的范围)
#include <cstdlib>
#include <iostream>
using namespace std;
char encoder[26] = {'C','S','P',0};
char decoder[26];
string st;
int main() {
int k = 0;
for (int i = 0; i < 26; ++i)
if (encoder[i] != 0) ++k;
for (char x ='A'; x <= 'Z'; ++x) {
bool flag = true;
for (int i = 0; i < 26; ++i)
if (encoder[i] ==x) {
flag = false;
break;
}
if (flag) {
encoder[k]= x;
++k;
}
}
for (int i = 0; i < 26; ++i)
decoder[encoder[i]- 'A'] = i + 'A';
cin >> st;
for (int i = 0; i < st.length( ); ++i)
st[i] = decoder[st[i] -'A'];
cout << st;
return 0;
}
1)输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( )
A. 正确 B. 错误
2)若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。()
A. 正确 B. 错误
3)将第 12 行的“i < 26”改为“i < 16”,程序运行结果不会改变。( )
A. 正确 B. 错误
4)将第 26 行的”i < 26”改为“i < 16”,程序运行结果不会改变。( )
A. 正确 B. 错误
5)若输出的字符串为“ABCABCABCA”,则下列说法正确的是( )。
A. 输入的字符串中既有S又有P B. 输入的字符串中既有S又有B
C. 输入的字符串中既有A又有P D. 输入的字符串中既有A又有B
6)若输出的字符串为“CSPCSPCSPCSP”,则下列说法正确的是( )。
A. 输入的字符串中既有P又有K B. 输入的字符串中既有J又有R
C. 输入的字符串中既有J又有K D. 输入的字符串中既有P又有R
【CSP 2019 入门组第一轮 q16】阅读程序(程序输入不超过数组或字符串定义的范围)
#include <cstdio>
#include <cstring>
using namespace std;
char st[100];
int main() {
scanf("%s", st);
int n = strlen(st);
for (int i = 1; i <= n; ++i) {
if (n % i == 0) {
char c = st[i - 1];
if (c >= 'a')
st[i - 1] = c - 'a' + 'A';
}
}
printf("%s", st);
return 0;
}
1)输入的字符串只能由小写字母或大写字母组成。()
A. 正确 B. 错误
2)若将第8行的“i = 1”改为“i = 0”,程序运行时会发生错误。()
A. 正确 B. 错误
3)若将第8行的“i <= n”改为“i * i <= n”,程序运行结果不会改变。()
A. 正确 B. 错误
4)若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。()
A. 正确 B. 错误
5)若输入的字符串长度为18,那么输入的字符串跟输出的字符串相比,至多有()个字符不同。
A. 18 B. 6 C. 10 D. 1
6)若输入的字符串长度为(),那么输入的字符串跟输出的字符串相比,至多有36个字符不同。
A. 36 B. 100000 C. 1 D. 128
【NOIP 2018 普及组初赛 q18】阅读程序写结果:
#include <stdio.h>
char st[100];
int main() {
scanf("%s", st);
for (int i = 0; st[i]; ++i) {
if ('A' <= st[i] && st[i] <= 'Z')
st[i] += 1;
}
printf("%s\n", st);
return 0;
}
输入:QuanGuoLianSai
【NOIP 2017 普及组初赛 q23】阅读程序写结果:
#include<iostream>
using namespace std;
int main()
{
int t[256];
string s;
int i;
cin >> s;
for (i = 0; i < 256; i++)
t[i] = 0;
for (i = 0; i < s.length(); i++)
t[s[i]]++;
for (i = 0; i < s.length(); i++)
if (t[s[i]] == 1)
{
cout << s[i] << endl;
return 0;
}
cout << "no" << endl;
return 0;
}
输入:xyzxyw
输出:_____