西北大学上机题——字符串处理系列
题目一:字母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;
}
运行测试: