#CS402. 阅读程序-字符处理
阅读程序-字符处理
阅读程序
注意:切勿用电脑直接运行代码得出答案,请用大脑+笔+纸运行代码答题,否则是在浪费你的时间。
第2节:字符处理
第1题【NOIP】2018
#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;
}
判断题
(1)第5行的循环将执行n次,n为字符串长度。
{{ select(1-1) }}
- 对
- 错
(2)输人的字符串必须由大写字母组成。
{{ select(1-2) }}
- 对
- 错
(3)输出最多含有25种大写字母。
{{ select(1-3) }}
- 对
- 错
(4)若输入的字符串由n种不同字符组成,则输出由n种不同字符组成。
{{ select(1-4) }}
- 对
- 错
●选择题
(5)输入QuanGuo,则输出的结果是()。
{{ select(1-5) }}
- RuanHuo
- quanguo
- QuanGuo
- PuanFuol
(6)如果将第07行的st[i]+=1;改成st[i]-=1;则第(5)题的输出结果为()
{{ select(1-6) }}
- QUANGUO
- PuanFuo
- quanguo
- QvboGvp
第2题【NOIP】2016
#include <iostream>
using namespace std;
int main()
{
int i, length1, length2;
string s1, s2;
s1 = "I have a dream.";
s2 = "I Have A Dream.";
length1 = s1.size();
length2 = s2.size();
for (i = 0; i < length1; i++)
if (s1[i] >= 'a' && s1[i] <= 'z')
s1[i] -= 'a' - 'A';
for (i = 0; i < length2; i++)
if (s2[i] >= 'a' && s2[i] <= 'z')
s2[i] -= 'a' - 'A';
if (s1 == s2)
cout << "=" << endl;
else if (s1 > s2)
cout << ">" << endl;
else
cout << "<" << endl;
return 0;
}
●判断题
(1)第6行输人的字符串如果包括数字、各类符号,可能运行错误。
{{ select(2-1) }}
- 对
- 错
(2)若length1<length2,输出为“<”。
{{ select(2-2) }}
- 对
- 错
(3)若去掉第10、13行,输出结果不变。
{{ select(2-3) }}
- 对
- 错
(4)若sl和s2中的各字符互不相同,则输出一定不为“=”。
{{ select(2-4) }}
- 对
- 错
●选择题
(5)输人Welcome与Chinese,count的结果是( )。
{{ select(2-5) }}
- <
- =
- 0
(6)若字符串的长度为n,则算法的时间复杂度是( )。
{{ select(2-6) }}
- O(n)
- O()
- O()
- O(nlogn)
第3题【NOIP】2014
#include <iostream>
#include <string>
using namespace std;
int main()
{
string st;
int i, len;
getline( cin, st );
len = st.size();
for ( i = 0; i < len; i++ )
if ( st[i] >= 'a' && st[i] <= 'z' )
st[i] = st[i] - 'a' + 'A';
cout << st << endl;
return(0);
}
●判断题
(1)输人的字符串可以是任意字符,包括字母、数字、各类符号甚至中文汉字。
{{ select(3-1) }}
- 对
- 错
(2)如果去掉第10行,输出结果不变。
{{ select(3-2) }}
- 对
- 错
(3)输出结果可以包含小写字母
{{ select(3-3) }}
- 对
- 错
(4)算法时间复杂度为O(1)。
{{ select(3-4) }}
- 对
- 错
●选择题
(5)输人Hello,输出的结果是()。
{{ select(3-5) }}
- HELLO
- hello
- Hello
- ello
(6)输出的结果不可能是()。
{{ select(3-6) }}
- WELCOME
- WELCOME-1
- Welcome
- ELCOME
第4题【NOIP】2008
#include <iostream>
#include <cstring>
using namespace std;
int i,j,len;
char s[50];
int main()
{
cin >>s;
len = strlen(s);
for (i = 0;i < len; ++i)
{
if (s[i] >= 'A' && s[i] <= 'Z') s[i] -= 'A' - 'a';
}
for (i = 0;i < len; ++i)
{
if (s[i] < 'x') s[i] += 3; else s[i] += -23;
}
cout << s << '/';
for (j = 1;j < 4;j ++)
{
for (i = 0;i < len-j; i = i + j)
{
s[i] = s[i + j] ;
}
}
cout << s << endl;
return 0;
}
●判断题
(1)输入的字符串长度为n,则输出的字符审长度为2n.
{{ select(4-1) }}
- 对
- 错
(2)如果去掉第18行,输出结果不变。
{{ select(4-2) }}
- 对
- 错
(3)若输入仅有字母,输出结果可以包含大写字母。
{{ select(4-3) }}
- 对
- 错
(4)算法时间复杂度为O(1)。
{{ select(4-4) }}
- 对
- 错
●选择题
(5)输入FGuvw,输出的结果是()。
{{ select(4-5) }}
- ixxz/zxxzz
- ixyz/xxzzz
- ijxyz/ixzzz
- ijxyz/zxzzz
(6)输出的结果不可能是()。
{{ select(4-6) }}
- fmw/www
- qpp/ppp
- vgo/ooo
- nouuuu
第5题【NOIP】2015
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
int i;
int count; count = 0;
getline( cin, str );
for ( i = 0; i < str.length(); i++ )
if ( str[i] >= 'a' && str[i] <= 'z' )
count++;
cout << "It has " << count << " lowercases" << endl; return(0);
}
●判断题
(1)第7行输入的字符串可以是任意字符,包括字母、数字、各类符号甚至中文汉字及符号
{{ select(5-1) }}
- 对
- 错
(2)执行完第10行循环后,count的值可能为0。
{{ select(5-2) }}
- 对
- 错
(3)若去掉11行,输出结果不变。
{{ select(5-3) }}
- 对
- 错
(4)若输入的字符串中各字符互不相同,则count不为0。
{{ select(5-4) }}
- 对
- 错
●选择题
(5)输入CSP2001,count的结果是()
{{ select(5-5) }}
- 3
- 7
- 8
- 0
(6)若字符串的长度为n,算法的时间复杂度是()。
{{ select(5-6) }}
- O(n)
- O(nlogn)
- O()
- O()
第6题【NOIP】2009
#include <iostream>
using namespace std;
const int maxn=50;
void getnext(char str[])
{
int l=strlen(str),i,j,k,temp;
k=l-2;
while(k>=0&&str[k]>str[k+1]) k--;
i=k+1;
while(i<l&&str[i]>str[k]) i++;
temp=str[k];
str[k]=str[i-1];
str[i-1]=temp;
for(i=l-1;i>k;i--)
for(j=k+1;j<i;j++)
if(str[j]>str[j+1])
{
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
return ;
}
int main()
{
char a[maxn];
int n;
cin >> a >> n;
while(n>0)
{
getnext(a);
n--;
}
cout << a << endl;
return 0;
}
●判断题
(1)每次循环找到的k一定不同。
{{ select(6-1) }}
- 对
- 错
(2)如果把第18~20行换成awaptstr[1],str[j+1]),输出结果不变
{{ select(6-2) }}
- 对
- 错
(3)去掉第32行会异致程序超时。
{{ select(6-3) }}
- 对
- 错
(4)输人的字符串可包含任意字母
{{ select(6-4) }}
- 对
- 错
●选择题
(5)输入NOIP3,输出的结果是( )
{{ select(6-5) }}
- NPOI
- NPIO
- NIPO
- PONI
(6)输入CSP2021 2,输出的结果是( )。
{{ select(6-6) }}
- CPS2120
- CSP2120
- CPS2210
- CSP2021
第7题【NOIP】2010
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
char m1, m2;
int i;
getline(cin, s);
m1 = ' ';
m2 = ' ';
for (i = 0; i < s.length(); i++)
if (s[i] > m1) {
m2 = m1;
m1 = s[i];
}
else if (s[i] > m2)
m2 = s[i];
cout<<int(m1)<<' '<<int(m2)<<endl;
return 0;
}
●判断题
(1)去掉第10、11行,程序会运行错误。
{{ select(7-1) }}
- 对
- 错
(2)去掉第18行的else,程序会运行错误。
{{ select(7-2) }}
- 对
- 错
(3)将12行替换为“for (i=s.length()-1;i>=0;i--)”,运行结果不变
{{ select(7-3) }}
- 对
- 错
(4)将18行的“s[i]>m2”替换为“s[i]>=m2”,运行结果不变。
{{ select(7-4) }}
- 对
- 错
●选择题
(5)当输入为AABBCCDD时,输出为()。
{{ select(7-5) }}
- BA
- CB
- D D
- D A
(6)当输入的字符串为大写字符串时,输出不可能为()。
{{ select(7-6) }}
- Z B
- AB
- T B
- G A
第8题【NOIP】2011
#include<iostream>
#include<string>
using namespace std;
int main()
{
string map= "2223334445556667778889999";
string tel;
int i;
cin>>tel;
for(i=0;i<tel.length();i++)
if((tel[i]>='0') && (tel[i]<='9') )
cout<<tel[i];
else if( (tel[i]>='A') && (tel[i]<='Z'))
cout<<map[tel[i]-'A'];
cout<<endl;
return 0;
}
●判断题
(1)第7行输人的字符事可以是任意字符,包括字母、数字、各类符号甚至中文汉字及符号()
{{ select(8-1) }}
- 对
- 错
(2)如果去掉第13行,程序无运行错误。
{{ select(8-2) }}
- 对
- 错
(3)输出结果可以包含大写字母。
{{ select(8-3) }}
- 对
- 错
(4)输出的字符串至多包含8种不同数字
{{ select(8-4) }}
- 对
- 错
●选择题
(5)输人CCF-NOIP-2011,输出的结果是( )。
{{ select(8-5) }}
- 22366472011
- 223-6647-2011
- 22366472011
- 22366482011
(6)输入 WELCOME-CSP,输出的结果是( )。
{{ select(8-6) }}
- 9352663277
- 9342663277
- 9342663278
- 9342663377
第9题【NOIP】2012
#include <iostream>
#include <string>
using namespace std;
int n,i,j,ans;
string s;
char get(int i)
{
if(i<n) return s[i];
else return s[i-n];
}
int main()
{
cin>>s;
n=s.size();
ans=0;
for(i=1;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
if(get(i+j)<get(ans+j))
{
ans=i;
break;
}
else if(get(i+j)>get(ans+j)) break;
}
for(j=0;j<=n-1;j++) cout<<get(ans+j);
cout<<endl;
return 0;
}
●判断题
(1)删除第15行程序,运行结果不会发生变化
{{ select(9-1) }}
- 对
- 错
(2)将第16行中的i-1改为i=0,运行结果不变
{{ select(9-2) }}
- 对
- 错
(3)在17,18行中间插入“if(get(i+j)==get(ans+j))continue;”运行结果不变
{{ select(9-3) }}
- 对
- 错
(4)将21行的break换成continue,因为这是for语句的最后一句,所以运行结果不变
{{ select(9-4) }}
- 对
- 错
●选择题
(5)当输人为ABCDEFG时,输出结果为( )
{{ select(9-5) }}
- ABCDEFG
- GFEDCBA
- ACEGFDB
- AGBFCED
(6)当输入为CBBADADA时,输出结果为()。
{{ select(9-6) }}
- ABABCDAD
- ABBCDADA
- ACBBADAD
- ADADACBB
第10题【NOIP】2016
#include <iostream>
using namespace std;
int main()
{
char a[100][100], b[100][100];
string c[100];
string tmp;
int n, i = 0, j = 0, k = 0, total_len[100], length[100][3];
cin >> n;
getline(cin, tmp);
for (i = 0; i < n; i++)
{
getline(cin, c[i]);
total_len[i] = c[i].size();
}
for (i = 0; i < n; i++)
{
j = 0;
while (c[i][j] != ':')
{
a[i][k] = c[i][j];
k = k + 1;
j++;
}
length[i][1] = k - 1;
a[i][k] = 0;
k = 0;
for (j = j + 1; j < total_len[i]; j++)
{
b[i][k] = c[i][j];
k = k + 1;
}
length[i][2] = k - 1;
b[i][k] = 0;
k = 0;
}
for (i = 0; i < n; i++)
{
if (length[i][1] >= length[i][2])
cout << "NO,";
else
{
k = 0;
for (j = 0; j < length[i][2]; j++)
{
if (a[i][k] == b[i][j])
k = k + 1;
if (k > length[i][1])
break;
}
if (j == length[i][2])
cout << "NO,";
else
cout << "YES,";
}
}
cout << endl;
return 0;
}
●判断题
(1)若输入的字符串不包括‘:’,可能运行错误。
{{ select(10-1) }}
- 对
- 错
(2)若n1 且length[i][1]<lenath[i][2],输出为“YES,”。
{{ select(10-2) }}
- 对
- 错
(3)若去掉第40、41行,输出结果不变。
{{ select(10-3) }}
- 对
- 错
(4)输出结果为一行字符串。
{{ select(10-4) }}
- 对
- 错
●选择题
(5)输入1 AB:ACDEbFBkBD.输出的结果是( )。
{{ select(10-5) }}
- YES,
- NO,
- 运行错误
- 运行超时
(6)输入1 AR:ACDBrT,输出的结果是()。
{{ select(10-6) }}
- YES,
- NO,
- 运行错误
- 运行超时
第11题【NOIP】2018
#include <iostream>
using namespace std;
string s;
long long magic(int l, int r) {
long long ans = 0;
for (int i = l; i <= r; ++i) {
ans = ans * 4 + s[i] - ‘a’ + 1;
}
return ans;
}
int main() {
cin >> s;
int len = s.length();
int ans = 0;
for (int l1 = 0; l1 < len; ++l1) {
for (int r1 = l1; r1 < len; ++r1) {
bool bo = true;
for (int l2 = 0; l2 < len; ++l2) {
for (int r2 = l2; r2 < len; ++r2) {
if (magic(l1, r1) == magic(l2, r2)
&& (l1 != l2 || r1 != r2))
bo = false;
}
}
if (bo) {
ans += 1;
}
}
}
cout << ans << endl;
return 0;
}
●判断题
(1)输出一定不为0。
{{ select(11-1) }}
- 对
- 错
(2)将15、16行与18、19行对调,答案不变。
{{ select(11-2) }}
- 对
- 错
(3)输人字符串最多包含5种字符串,若更多则容易互相冲突。
{{ select(11-3) }}
- 对
- 错
(4)调用第12行需要iostream库头。
{{ select(11-4) }}
- 对
- 错
●选择题
(5)输人abacaba,则输出的结果是()。
{{ select(11-5) }}
- 16
- 17
- 18
- 19 (6)输人abechbce,则输出的结果是
{{ select(11-6) }}
- 16
- 20
- 18
- 19