除去英文句子中的数字、空格和标点符号

        题目:一个英文句子,句子中仅包含英文字母,数字,空格和标点符号,其中数字、空格和标点符号将句子划分成一个个独立的单词,除去句子中的数字、空格和标点符号,将句子中的每个单词的首字母大写,然后输出句子,输出时各个单词之间以一个空格隔开,句子以“.”结束

输入样例 1
Who love?, Solo..
输出样例 1

Who Love Solo.

输入样例 2

----Who,love???Solo
输出样例 2

Who Love Solo.

输入样例 3

66666666664123+Who-32didn't love? Solo32..
输出样例 3

Who Didn T Love Solo.

#include<iostream>
#include<string>

using std::endl;
using std::cin;
using std::cout;
using std::string;

bool IsLetter(char character) {
	if (character >= 'a' && character <= 'z') {
		return true;
	}
	if (character >= 'A' && character <= 'Z') {
		return true;
	}
	return false;
}
int FindTheLastLetterPosition(string input, int startPosition) {     //传值时已经确保startPosition下标的值是字母
	for (int i = startPosition; i < input.length(); i++) {
		if (!IsLetter(input[i])) {                                   //找到第一个不是字母的字符,返回其下标
			return i;                                                //下标为i的值不是字母
		}
	}
	return input.length();
}
void outputstring(string input, int startPosition, int lastPosition) {
	cout << (char)toupper(input[startPosition]);
	for (int i = startPosition + 1; i < lastPosition; i++) {
		cout << input[i];
	}
}
int main()
{
    string input;
    bool flage=false;
	getline(cin, input);
	for (int i = 0; i < input.length(); i++) {
		if (IsLetter(input[i])) {
			if (flage) {
				cout << " ";
			}
			flage = true;
			int lastPosition = FindTheLastLetterPosition(input, i);
			outputstring(input, i, lastPosition);
			i = lastPosition;
		}
	}
	cout << "." << endl;
	return 0;
}

        从前往后找,找到第一个字母,记录下标。然后调用函数FindTheLastLetterPosition()找出这个字母后的第一个非字母的下标lastPosition。输出这两个下标之间的字符就是第一个单词了,然后继续从lastPosition + 1开始找,直到找到字符串末尾。

        至于第一个字母大写,有现成函数直接转换就好了。还有输出是单词以空格分隔,以‘.’结尾,这个可以自己思考一下,我也想了半个多小时。还是蛮有意思的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中南自动化学院至渝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值