上机实验:字符数组
统计元音字母个数
任务描述
本关任务:输入一个字符串(少于80个字符),统计并输出其中元音字母(AEIOUaeiou)的个数(不区分大小写)。
编程要求
在右侧编辑器补充代码,输出字符串中元音字母的个数。
测试说明
平台会对你编写的代码进行测试:
测试输入:I have an apple
预期输出:Count=6
参考代码
#include <iostream>
using namespace std;
int main() {
char str[90], t[12]="AEIOUaeiou";
cin.getline(str, 80);
int cnt = 0;
for (int i=0;str[i];i++) {
for (int j=0;j<10;j++) if (str[i]==t[j]) { cnt++; break; }
}
cout << "Count=" << cnt << endl;
return 0;
}
字符重排序
任务描述
本关任务:输入一个字符串(少于80个字符),去掉重复的字符后,按照字符的ASCII码值从大到小输出。
编程要求
在右侧编辑器补充代码,去掉重复字符后按照字符的ASCII码从大到小输出。
测试说明
平台会对你编写的代码进行测试:
测试输入:ya7bb2tizx4m55n9q2
预期输出:zyxtqnmiba97542
参考代码
#include <iostream>
using namespace std;
int main()
{
char str[81];
cin.getline(str, 80);
for (int i=0;str[i];i++) {
for (int j=i+1;str[j];j++) {
if (str[i]<str[j]) {
str[i]^=str[j]^=str[i]^=str[j];
}
}
}
for (int i=0;str[i];i++) {
if (i==0 || str[i]!=str[i-1]) cout << str[i];
}
return 0;
}
寻找字符串
任务描述
本关任务:输入两个字符串str1和str2,每个字符串是一行,查找str2在str1里首次出现的位置。
编程要求
在右侧编辑器补充代码,根据读入的两个字符串,实现查找功能。如果str2在str1中不存在,则输出-1。
注意:(1)每一行不超过160个字符,可以包含任意字符;(2)不使用字符串比较的库函数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
To be, or not to be:that is the question,
To
预期输出:
0
测试输入:
To be, or not to be:that is the question,
Be
预期输出:
-1
参考代码
#include <iostream>
using namespace std;
int main()
{
char str1[165], str2[165];
cin.getline(str1, 161);
cin.getline(str2, 161);
bool is_exist = false;
for (int i=0, j; str1[i]; i++) {
for (j=0; str2[j]; j++)
if (str1[i+j] != str2[j]) break;
if (!str2[j]) {
cout << i;
is_exist = true;
break;
}
}
if (!is_exist) cout << -1;
return 0;
}
摩尔斯电码
任务描述
本关任务:编写一个程序,读入一个英语短语,然后把它编码成摩尔斯码。每个摩尔斯编码字母之间用一个空格,每个摩尔斯编码单词之间用三个空格。
摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,用一系列圆点和破折号表示字母表中的每个英文字母,每个数字和一些特殊标点符号,如下图1所示。

输入为一行,一个字符串,字符串中仅有大小写英文字母(大小写不作区分),数字,和空格。 输出为一行,对于输入的每个字符,如果是英文字母或数字,则输出对应的摩斯电码,否则输出原字符,两个输出间用一个空格相间。 例如:输入为
a0b 12
则输出为
.- ----- -... .---- ..---
编程要求
在右侧编辑器补充代码,将英语短语编码成摩尔斯码。
测试说明
平台会对你编写的代码进行测试:
测试输入:SOS
预期输出:... --- ...
参考代码
#include <iostream>
#include <cstring>
using namespace std;
char alp[30][8] = {
".-", "-...", "-.-.", "-..",
".", "..-.", "--.", "....",
"..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-",
"..-", "...-", ".--", "-..-",
"-.--", "--.."
};
char num[15][8] = {
"-----", ".----", "..---", "...--",
"....-", ".....", "-....", "--...",
"---..", "----."
};
int main()
{
char s[101];
cin.getline(s, 100);
for (int i=0;s[i];i++) {
if ('a' <= s[i] && s[i] <= 'z') cout << alp[s[i]-'a'] << " ";
else if ('A' <= s[i] && s[i] <= 'Z') cout << alp[s[i]-'A'] << " ";
else if ('0' <= s[i] && s[i] <= '9') cout << num[s[i]-'A'] << " ";
else cout << s[i] << " ";
}
return 0;
}