西北大学上机题——字符串处理系列

西北大学上机题——字符串处理系列

题目一:字母a的个数
题目描述:
输入一段英文字符,统计其中有多少个a字母
输入描述:
输入一段英文字符数不超过80个字符
输出描述:
输出这段英文字符中字母a的个数
样例输入:
fave cad ecd ygaijj
样例输出:
3

#include<iostream>
using namespace std;
int main() {
	char c[80];
	cout << "请输入字符串:";
	cin.getline(c, 80);
	int count = 0;
	for (int i = 0;c[i] != '\0';i++) {
		if (c[i] == 'a') {
			count++;
		}
	}
	cout << "a的数量为:" << count << endl;
	return 0;
}

运行测试:
在这里插入图片描述
题目二:统计元音个数
题目描述:
统计每个元音字母在字符串中出现的次数。
输入描述:
每组输入数据是一行不超过100的字符串
输出描述:
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
样例输入:
my name is ignatius
样例输出:
a:2
e:1
i:3
o:0
u:1

#include<iostream>
using namespace std;
int main() {
	char c[100];
	cout << "请输入字符串:" << endl;
	cin.getline(c, 100);
	int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;
	for (int i = 0;c[i] != '\0';i++) {
		switch (c[i])
		{
		case('a'):num1++;break;
		case('e'):num2++;break;
		case('i'):num3++;break;
		case('o'):num4;break;
		case('u'):num5++;break;
		default:
			break;
		}
	}
	cout << "a:" << num1 << endl;
	cout << "e:" << num2 << endl;
	cout << "i:" << num3 << endl;
	cout << "o:" << num4 << endl;
	cout << "u:" << num5 << endl;
	return 0;
}

运行测试:
在这里插入图片描述
题目三:合法标识符
题目描述:
输入一个字符串,判断其是否是C语言的合法标识符,标识符由字母,下划线,数字这三种类型组成,但开头必须是字母或下划线(不用判断是否和保留字相同)
输入描述:
每组输入数据是一个长度不超过50的字符串
输出描述:
对于每组输入数据,如果是C的合法标识符,请输出“yes”,否则输出“no”。
样例输入:
12ajf
样例输出:
no

算法思路:先检查字符串首字符是否是下划线或者字母,如果不是则不合法,再检查后续字符是否是字母,数字,下划线,若不是则不合法。

#include<iostream>
using namespace std;
bool isUnderline(char c) {//判断是否是下划线
	if (c == '_')
		return true;
	else
		return false;
}
bool isCharacter(char c) {//判断是否是字母
	if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
		return true;
	else
		return false;
}
bool isNumber(char c) {//判断是否是数字
	if (c >= '0' && c <= '9')
		return true;
	else
		return false;
}
bool isDentifier(char c[]) {//判断是否是正确的表达式
	if (!isCharacter(c[0]) && !isUnderline(c[0]))
		return false;
	int i = 1;
	while (c[i] != '\0') {
		if (!isCharacter(c[i]) && !isUnderline(c[i]) && !isNumber(c[i]))
			return false;
		i++;
	}
	return true;
}
int main() {
	char c[50];
	cout << "输入字符串:";
	cin.getline(c, 50);
	if (isDentifier(c)) {
		cout << "yes" << endl;
	}
	else {
		cout << "no" << endl;
	}
	return 0;
}

运行测试:
在这里插入图片描述
在这里插入图片描述
题目四:单词统计
题目描述:
给定一个字符串,请计算其中一共包含多少个单词(假设连续的非空格字母即为一个单词)。
输入描述:
输入数据是一个长度为S(0<S<1000)的字符串,其中只包含字母和空格。
输出描述:
请输出给定字符串一共包含的单词数。
样例输入:
Welcome to NWU
样例输出:
3

算法思路:连续的非空格字符即为一个单词,我们只需要找到单词的边界就能确定单词的个数。每个单词的开始时非空格字符,开始到末尾之间都是非空格字符,而末尾的下一个字符是空格字符或者‘\0’,所有,当我们找到一个当前位置为空格字符(或‘\0’),而前一个为非空格字符的位置,即找到了一个单词。

#include<iostream>
#include<string>
using namespace std;
int countWord(string str) {
	int count = 0;
	for (int i = 0;i < str.length();i++) {
		if (str[i] != ' ' && (str[i + 1] == ' ' || str[i + 1] == '\0')) {
			count++;
		}
	}
	return count;
}
int main() {
	string str;
	cout << "输入字符串:";
	getline(cin, str);
	cout << "单词个数:" << countWord(str) << endl;
	return 0;
}

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值