华中科技大学上机题

华中科技大学上机题

题目一:
从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间由若干个空格隔开,英文单词由大小写字母组成,编程完成下列任务:
(1)统计并输出此句子中英文字母的个数;
(2)统计并输出此句子中单词的个数;
(3)查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)和次数。当出现最多的字符不止一个时,都能找到,并输出找到的所有字母及次数。(输出字母时大小写均可)。
例如:输入句子:This is An Pencil Case
则输出为:
字母个数:18
单词个数:5
最多的字母:i,s
出现的次数:3

算法思想:
(1)对于第一问,直接逐个读取字符串中的每个字符,判断是否是字母,再进行计数就可。
(2)对于第二问,可以根据单词的边界进行判断,每个单词后面都是空格或是字符串结束标志’\0’。若一个字母后面一个字符是空格或字符串结束标志,则前面的这些字母就构成了一个单词。
(3)对于第三问,我们可以通过数组存储每个单词的出现次数(大小写算一种),找出次数的最大值,然后再遍历一遍,把出现次数等于最大次数的字母输出出来。

#include<iostream>
#include<string>
using namespace std;
bool isCharacter(char c) {
	if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
		return true;
	else
		return false;
}
void function1(string str) {
	int count = 0;
	int i = 0;
	while (str[i] != '\0') {
		if (isCharacter(str[i])) {
			count++;
		}
		i++;
	}
	cout << "字母个数:" << count << endl;
}
void function2(string str) {
	int count = 0;
	for (int i = 0;i < str.length();i++) {
		if (isCharacter(str[i]) && (str[i + 1] == ' ' || str[i + 1] == '\0'))
			count++;
	}
	cout << "单词个数:" << count << endl;
}
void function3(string str) {
	int count[26];
	for (int i = 0;i < 26;i++)
		count[i] = 0;
	for (int i = 0;i < str.length();i++) {
		if (str[i] >= 'a' && str[i] <= 'z') {
			int num = int(str[i] - 'a');
			count[num]++;
		}
		if (str[i] >= 'A' && str[i] <= 'Z') {
			int num = int(str[i] - 'A');
			count[num]++;
		}
	}
	int max = 0;
	for (int i = 0;i < 26;i++) {
		if (count[i] > max)
			max = count[i];
	}
	cout << "最多的字母:";
	for (int i = 0;i < 26;i++) {
		if (count[i] == max) {
			cout << char(i + 'a') << " ";
		}
	}
	cout << endl;
	cout << "出现的次数:" << max << endl;
}
int main() {
	string str;
	cout << "输入字符串:";
	getline(cin, str);
	function1(str);
	function2(str);
	function3(str);
	return 0;
}

运行测试:
在这里插入图片描述
题目二描述:
十二进制是数学中一种以12为底数的计数系统,它由0-9,a,b组成,与十进制的对位关系是:0-9对应0-9,a对应10,b对应11.例如,十二进制的a2,十进制是122,。输入一个仅含十二进制数字的字符串(字母一律小写,不超过8个字符),完成以下任务:
(1)输出该十二进制数每一位对应的十进制数(从高位到低位顺序输出,空格隔开);
(2)实现“十二进制”转“十进制”算法,输出该十二进制数对应的十进制数;
(3)输出转换后的十进制数在内存中的每个二进制位(共4字节,每字节之间空格隔开)。
例如:输入十二进制数:a2
则输出位:
10 2
122
00000000 00000000 00000000 01111010

算法思想:
(1)第一问,逐个字符分析即可。
(2)第二问,根据权值进行计算,与二进制和十进制的转换是类似的。
(3)第三问,其实是把十进制转换成二进制,我们可以把转换成的二进制数存放到数组中。因为要以4字节长度输出,我们先由低位到高位按顺序存储,后面进行补0,补到四字节长度,然后对数组进行逆置。

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int dozenCharToDecem(char c) {//将十二进制的字符转换成对应的十进制
	int result = -1;
	if (c >= '0' && c <= '9')
		result = c - '0';
	else if (c == 'a')
		result = 10;
	else if (c == 'b')
		result = 11;
	return result;
}
void printDozenToDecem(char num[]) {//打印十二进制字符串中的每一位转换为对应的十进制
	for (int i = 0;num[i] != '\0';i++) {
		cout << dozenCharToDecem(num[i]) << " ";
	}
	cout << endl;
}
int dozenToDecem(char num[]) {//将十二进制转换为十进制
	int result = 0;
	int weight = 0;
	int i = strlen(num) - 1;
	while (i >= 0) {
		result += dozenCharToDecem(num[i]) * pow(12, weight);
		weight++;
		i--;
	}
	return result;
}
void printNumofBin(int num) {//以4字节长度输出十进制数num的二进制形式
	int bin[32];
	int i;
	for (i = 0;i < 32;i++)
		bin[i] = 0;
	i = 31;
	while (num / 2 != 0) {
		bin[i] = num % 2;
		num /= 2;
		i--;
	}
	bin[i] = num;
	for (i = 0;i < 32;i++) {
		cout << bin[i];
		if ((i + 1) % 8 == 0)
			cout << ' ';
	}
	cout << endl;
}
int main() {
	char num[8];
	cout << "输入十二进制数:";
	cin >> num;
	printDozenToDecem(num);
	cout << dozenToDecem(num) << endl;
	printNumofBin(dozenToDecem(num));
	return 0;
}

运行测试:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值