GESP三级真题汇总 – 字符串及其函数

2025年6月

选择题

第13题

C++代码 string s = “GESP考试”;,s占据的字节数是()

A. 10
B. 8
C. 8或10
D. 取决于计算机采用什么编码

第14题

C++语句 string s=”Gesp Test”:执行s.rfind(“e”)以后,输出的是()

A. 1
B. 2
C. 6
D. 3

第15题

字符串”Gesp考试”,字符数是()

A. 10
B. 8
C. 6
D. 字符数多少取决于编码

判断题

第1题

C++中 string的==运算符比较的是字符串的内存地址,而非内容

第2题

string的substr(1,3)返回从下标1开始的3个字符的子串。

第4题

string(“hello”) == “hello”的比较结果为true。

第7题

string的substr(2,10)在字符串长度不足时会抛出异常。

2025年3月

选择题

第13题

下面程序最后能够得到HelloC++的是()


int main() {
    string str = "HelloWorld";
    //此处填入代码
    cout << str;
    return 0;
}
A. str.replace(0, 5, “C++”);
B. str.replace(5, 5, “C++”);
C. str.replace(1, 5, “C++”);
D. str.replace(4, 5, “C++”);

第14题

想要得到字符串 world,下面程序横线处应该填入的是()


#include <iostream>
#include <string>
using namespace std;

int main() {
    string str = "HelloC++";
    //此处填入代码
    return 0;
}
A. str.insert(4, “World”); cout << str.substr(4, 4);
B. cout << str.substr(5, 5);
C. str.insert(“World”); cout << str.substr(5,5);
D. str.insert(5, “World”); cout << str.substr(5, 5);

编程题

第2题

词频统计

在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定几个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即Apple、apple、APPLE、aPPle等均视为同一个单词)。请你编写一个程序,输入n个单词,输出其中出现次数最多的单词。

输入格式:
第一行,一个整数n,表示单词的个数:
接下来n行,每行包含一个单词,单词由大小写英文字母组成。
输入保证,出现次数最多的单词只会有一个。

输出格式:
输出一行,包含出现次数最多的单词(输出单词为小写形式)。

2024年12月

选择题

第7题

下列代码输出的是


string s="1234@@chenadai";
string str="12345";
s.replace(1,5, str);
cout<<s<<endl;
A. 12345
B. 2345@
C. 112345chenadai
D. 12345chenadai

第9题

下列程序输出的是()


string ch="hello";
if(ch[5]==NULL)
{
    cout<<"right"<<endl;
}
else if (ch[5]=='\\0')
{
    cout<<"wrong"<<endl;
}
else
{
    cout<<"hello"<<endl;
}
A. right
B. wrong
C. hello
D. 不能正确执行

第10题

下列程序中,假设一个字符占用的内存空间是1,下列程序中,ch占用的内存空间是()


char ch[] = "hello world";
size_t ret=strlen(ch);
cout<<ret<<endl;
A. 11
B. 10
C. 13
D. 12

第11题

下列程序最后输出的是()


int a=65;
cout<<tolower(a)<<endl;
A. 65
B. A
C. a
D. 97

判断题

第6题

下列可执行程序段中,最后pos的值是4


string str="chenADai";
int pos = str.find('D');
--pos;

第7题

该段程序将不能正确执行


string ch="chen";
cout<<ch[4]<<endl;

第8题

将输出 97


char a='A';
a=a+32;
cout<<(int)a<<endl;

编程题

第2题

打印数字

小杨为数字0,1,2和3设计了一款表示形式,每个数字占用了5×5的网格。小杨想请你将给定的数字转换为对应的表示形式。

输入格式:
第一行包含一个正整数n。

输出格式:
输出对应的表示形式。

2024年9月

选择题

第15题

下列程序输出的是()


string str = "Hello,陈A歹";
cout << str.find("A") << '\\n';
A. 9
B. 8
C. 7
D. 6

判断题

第6题

下列程序输出的是3。()


string str="陈ADai";
size_t pos = str.find('D');
cout<<pos<<endl;

编程题

第2题

回文拼接

一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,aabaa 和ccddcc都是回文串,但abcd 不是。小杨有n个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为2的回文串前后拼接而成。

输入格式:
第一行包含一个正整数n,代表字符串数量。
之后n行每行一个仅包含小写字母的字符串。

输出格式:
对于每个字符串输出一行,如果该字符串由两个长度至少为2的回文串前后拼接而成则输出Yes,否则输出 No。

2024年6月

选择题

第9题

如果字符串定义为char str[] = “GESP”;,则字符数组str的长度为()。

A. 0
B. 4
C. 5
D. 6

第12题

已知字符’0’的ASCII编码的十进制表示为48,则执行下面C++代码后,输出是()。


string s = "0629";
int n = s.length();
int x = 0;
for(int i=0; i < n; i++)
    x += s[i];
cout << x << endl;
A. 17
B. 158
C. 209
D. 316

第14题

下面可以正确输出 They're planning a party for their friend's birthday.的C++语句是? ()

A. cout << 'They\\'re planning a party for their friend'\\s birthday."' << endl;
B. cout << "They\\'re planning a party for their friend's birthday."' << endl;
C. cout << 'They're planning a party for their friend's birthday. ' << endl;
D. cout << "They\\'re planning a party for their friend\\'s birthday." << endl;

第15题

如果执行下面C++代码后,输出的结果是“gesp ccf org cn”,则横线上应填入哪个代码?()


string str = "gesp.ccf.org.cn";
string delimiter = ".";
string result="";
string token;
size_t found = str.find(delimiter);
while (found != string::npos) {
    token = str.substr(0, found);
    result += token;
    result += " ";
    // 在此处填入代码
    found = str.find(delimiter);
}
//最后一部分
result += str;
result += " ";
cout << result << endl;
A. str = str.substr(found + delimiter.length(), str.length()-1);
B. str = str.substr(found, str.length());
C. str = str.substr(found, str.length() -1);
D. 以上都不对

判断题

第4题

字符常量 '\\0'常用来表示字符串结束,和字符常量'0'相同。

编程题

第1题

移位

小杨学习了加密技术移位,所有大写字母都向后按照一个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环,例如,当偏移量是3的时候,大写字母A会替换成D,大写字母Z会替换成C。

输入格式:
第一行包含一个正整数n。

输出格式:
输出在偏移量为n的情况下,大写字母表ABCDEFGHIJKLMNOPQRSTUVWXYZ移位替换后的结果。

2024年3月

选择题

第5题

已知字符'0'的ASCII编码的十进制表示为48,则执行下面C++代码后,输出是()


int main()
{
    string s = "316";
    int n = s.length();
    int x = 0;
    for(int i=0; i < n; i++)
        x += s[i];
    cout << x << endl;
    return 0;
}
A. 10
B. 58
C. 154
D. 316

第8题

在下列代码的横线处填写(),可以使得输出是 GESP IS INTERESTING.


int main()
{
    string str="gEsP is Interesting";
    int x = str.length();
    for(int i=0; i < x; i++)
        if ((str[i]>='a') && (str[i]<='z'))
            // 在此行填写代码
    cout << str << endl;
    return 0;
}
A. str[i] += 'a' - 'A'
B. str[i] += 20
C. str[i] += 'A' - 'a'
D. 无法实现

第9题

假设英文句子由若干词构成。下面C++代码统计输出的词数是( )。


int main()
{
    string str="gEsP is Interesting !";
    int x = str.length();
    int nwords = 0;
    for(int i=0; i < x; i++)
        if (str[i]==' ') {
            nwords++;
            while(str[++i]==' ');
        }
    cout << nwords << endl;
    return 0;
}
A. 1
B. 2
C. 3
D. 4

第12题

定义字符数组 char str[20] = {'G', 'E', 'S', 'P'};,则str的字符串长度为()。

A. 4
B. 5
C. 19
D. 20

判断题

第6题

执行下面C++代码后将输出2。()


int main()
{
    string str="gEsP is Interesting";
    int x = str.find("s");
    cout << x << endl;
    return 0;
}

编程题

第1题

字母求和

对于每一个小写英文字母,该小写字母代表了一个正整数,即该字母在字母表顺序中的位置。对于每一个大写英文字母,该大写字母代表了一个负整数,即该字母的ASCII码的相反数。对于给定的字符串,请你计算出它对应的加密前的整数是多少。

输入格式:
第一行一个正整数n,表示字符串中字母的个数。
第二行一个由大写字母和小写字母的字符串T,代表加密后得到的字符串。

输出格式:
输出一行一个整数,代表加密前的整数。

2023年12月

选择题

第3题

下面C++代码执行后不能输出"GESP"的是()

A. string str("GESP"); cout<<str<<endl;
B. string str="GESP"; cout<<str<<endl;
C. string str("GESP"); cout<<str[1]<<str[2]<<str[3]<<str[4]<<endl;
D. string str{"GESP"}; cout<<str<<endl;

第5题

执行下面C++代码后,输出是( )。


string str=("chen");
int x=str.length();
int temp = 0;
for(int i=0;i<=x;i++)
{
    temp++;
}
cout<<temp<<endl;
A. 4
B. 2
C. 5
D. 3

第6题

执行下面C++代码后输出的是( )。


string str=("chen");
int x=str.length();
cout<<x<<endl;
A. 4
B. 3
C. 2
D. 5

第7题

执行下面C++代码后输出的是( )。


string str=("chen");
cout<<str[5]<<endl;
A. 输出未知的数
B. 输出'n'
C. 输出 '0'
D. 输出空格

第8题

下面C++代码执行后的输出是( )。


char ch[10]={'1'};
cout<<ch[2]<<endl;
A. 0
B. 1
C. 输出空格
D. 什么也不输出

第9题

下面C++代码用于统计每种字符出现的次数,当输出为3时,横线上不能填入的代码是()。


string str="GESP is a good programming test ";
int x=0;
for(int i=0;i<str.length();i++)
{
    if( ________ )
    {
        x++;
    }
}
cout<<x<<endl;
A. str[i]=='o'
B. str[i]=='a'+14
C. str[i]==115
D. str[i]==111

第13题

C++代码用于抽取字符串中的电话号码。约定:电话号码全部是数字,数字之间没有其他符号如连字符或空格等。代码中变量strSrc仅仅是示例,可以包含更多字符。下面有关代码说法,正确的说法是( )。


string strSrc="红十子:01084025890火警电话:119急救电话:120紧急求助:110";
string tel="";
for(int i=0;i<=strSrc.length();i++)
{
    if(strSrc[i]>='0'&&strSrc[i]<='9')
    {
        tel=tel+strSrc[i];
    }
    else if(tel!="")
    {
        cout<<tel<<endl;
        tel="";
    }
}
A. 代码将换行输出各个含有数字的电话号码。
B. 代码将不换行输出各个含有数字的电话号码,号码中间没有分隔。
C. 代码将不换行输出各个含有数字的电话号码,号码中间有分隔。
D. 不能够输出数字电话号码。

判断题

第2题

C++程序执行后,输入chen a dai 输出应该为:chen。( )


string str;
cin>>str;
cout<<str;

第4题

执行下面C++代码后将输出"China"。()


string a="china";
a.replace(0,1, "C");
cout<<a<<endl;

编程题

第2题

单位转换

小杨这周的数学作业是做单位转换。小杨的作业只涉及将更大的单位转换为更小的单位。现在,请你帮忙完成单位转换的程序。

输入格式:
输入的第一行为一个整数N,表示题目数量。接下来N行,每行一个字符串,表示转换单位的题目,格式为`x 单位1=?单位2`。

输出格式:
输出N行,依次输出所有题目的答案,输出时,只需要将输入中的?代入答案,其余部分一字不差地输出即可。

2023年9月

选择题

第3题

已知大写字符'A'的ASCII编码的十六进制表示为0x41,则字符'L'的ASCII编码的十六进制表示为()

A. 4A
B. 4B
C. 4C
D. 52

编程题

第2题

进制判断

现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而1011 则是四种进制皆有可能。

输入格式:
输入的第一行为一个十进制表示的整数N。接下来N行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,且不以0开头。

输出格式:
输出N行,每行4个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用1表示可能,使用0表示不可能。

2023年6月

选择题

第5题

如果字符串定义为char str[] = "Hello";,则字符数组str的长度为( )。

A. 0
B. 5
C. 6
D. 7

判断题

第5题

字符常量'\\0'常用来表示字符串结束,它和字符常量'0'是不同的。

编程题

第2题

密码合规检测

网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求:
1、只能由a-z, A-Z, 0-9及!@#$四个特殊字符构成。
2、密码最短长度:6个字符,密码最大长度:12个字符。
3、大写字母、小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。

输入格式:
输入一行不含空格的字符串。该字符串被英文逗号分隔为多段,作为多组被检测密码。

输出格式:
输出若干行,每行输出一组合规的密码。输出顺序以输入先后为序。