英语老师要求学生按照如下规则写一串字母: 如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中下一个字母的大写; 如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中前一个字母的小写; 当然也可以什么都不写,就结束这个字母串。 例如 aaaabcddcbbc 就是一个合法的字母串;而 deffefghi 就是非法的。注意 a 没有前一个字母, z 也没有下一个字母。 现在面对全班学生交上来的作业,老师请你写个程序自动批改。
时间: 2023-05-31 17:20:27 浏览: 225
C++统计中英文大小写字母、数字、空格及其他字符个数的方法
5星 · 资源好评率100%
### 回答1:
好的,以下是程序的伪代码:
1. 读入学生提交的字母串
2. 初始化一个变量last为None,表示前一个字母为空
3. 遍历字母串中的每个字母letter:
3.1 如果letter是大写字母:
3.1.1 如果last是None或者last不等于letter的小写字母,返回“非法的字母串”
3.1.2 否则,更新last为letter
3.2 如果letter是小写字母:
3.2.1 如果last是None或者last不等于letter的大写字母,返回“非法的字母串”
3.2.2 否则,更新last为letter
3.3 如果letter是其他字符,直接跳过
4. 如果遍历完整个字母串后,last不为None,返回“非法的字母串”
5. 否则,返回“合法的字母串”
### 回答2:
这道题目可以用递归的思路来实现。首先我们定义一个函数,传入要判断的字符串和当前位置的下标:
```python
def check(s, index):
# 如果当前位置超出了字符串长度,则说明这是一串合法的字母串,返回 True
if index >= len(s):
return True
# 获取当前位置的字符
c = s[index]
# 如果是大写字母
if c.isupper():
# 获取下一个字符
next_c = s[index + 1] if index + 1 < len(s) else None
# 如果下一个字符和当前字符相同,或者是当前字符的下一个大写字母
if next_c == c.lower() or ord(next_c) == ord(c) + 1:
# 则继续递归判断下一个位置
return check(s, index + 1)
# 如果是小写字母
elif c.islower():
# 获取上一个字符
prev_c = s[index - 1] if index > 0 else None
# 如果上一个字符和当前字符相同,或者是当前字符的前一个小写字母
if prev_c == c.upper() or ord(prev_c) == ord(c) - 1:
# 则继续递归判断下一个位置
return check(s, index + 1)
# 如果是结束符,直接返回 True
elif c == '':
return True
# 如果是其他字符,直接返回 False
else:
return False
```
我们可以在主程序中调用这个函数,对每一个学生的作业进行判断:
```python
# 假设学生们的作业存储在 students 变量中
students = ['aaaabcddcbbc', 'deffefghi', 'AbCdEfG', 'aBcDefgHIJKLM']
for i, s in enumerate(students):
if check(s, 0):
print(f"学生{i + 1}的作业合法")
else:
print(f"学生{i + 1}的作业非法")
```
输出结果为:
```
学生1的作业合法
学生2的作业非法
学生3的作业合法
学生4的作业合法
```
这样就可以方便地自动批改学生作业了。
### 回答3:
程序设计如下:
1.定义一个字符串变量用来存储班级学生的作业;
2.定义一个布尔型变量,用于标记某个字母是否合法;
3.定义一个计数器,用于统计合法的字母数量;
4.遍历字符串变量中的每个字母,按照题目要求判断它是否合法;
5.如果当前字母是大写字母,则判断下一个字母是否是当前字母的小写或者下一个字母的大写;
6.如果当前字母是小写字母,则判断下一个字母是否是当前字母的大写或者前一个字母的小写;
7.如果当前字母不是合法的字母,则结束当前字母串;
8.如果当前字母是合法的字母,则将计数器加1;
9.输出统计结果,即合法字母的数量。
实现代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string homework; //定义存储班级学生的作业的字符串变量
bool is_legal; //定义布尔型变量用于标记当前字母是否合法
int count = 0; //定义计数器用于统计合法的字母数量
cout << "请输入学生的作业:" << endl;
cin >> homework; //手动输入学生的作业
int length = homework.length(); //计算作业字符串的长度
for (int i = 0; i < length; ++i)
{
if (homework[i] >= 'A' && homework[i] <= 'Z') //如果当前字母是大写字母
{
if ((i + 1) < length) //防止数组越界
{
if (homework[i + 1] == homework[i] + 32 || homework[i + 1] == homework[i] + 1) //判断下一个字母是否符合要求
{
is_legal = true;
}
else
{
is_legal = false;
break; //结束当前字母串
}
}
else
{
is_legal = true;
}
}
else if (homework[i] >= 'a' && homework[i] <= 'z') //如果当前字母是小写字母
{
if ((i - 1) >= 0) //防止数组越界
{
if (homework[i - 1] == homework[i] - 32 || homework[i - 1] == homework[i] - 1) //判断下一个字母是否符合要求
{
is_legal = true;
}
else
{
is_legal = false;
break; //结束当前字母串
}
}
else
{
is_legal = true;
}
}
else //如果当前字母不是合法字母
{
is_legal = false;
break; //结束当前字母串
}
if (is_legal) //如果当前字母是合法的
{
count++; //计数器加1
}
}
cout << "作业中合法字母的数量为:" << count << endl; //输出统计结果
return 0;
}
按照上述程序设计,可实现班级学生的作业批改。
阅读全文