把字符串中的单词首字母变成大写

总结:用有穷状态自动机写了个程序,算是对它的复习吧!~其实也是想试试。学到东西还是挺多的,flag标志来控制是否的变成大写,以及对非字符的处理状态" NOUP ",对字符的处理“UP”又分两类“大写”和“小写”。

#include<iostream>
#include<string>
#include<cctype>
using namespace std;

void upperTheFirstLetter(string &str) {
	const int BEGIN = 0;
	const int NOUP = 1;
	const int UP = 2;
	int STATE = BEGIN;
	unsigned int flag = 1;
	for (size_t i = 0; i < str.size(); i++) {
		switch(STATE){
			case BEGIN:
				if (isspace(str[i]) || ispunct(str[i])) {
					STATE = NOUP;
				}
				else if (islower(str[i])||isupper(str[i])) {
					STATE = UP;
					i--;
				}
				break;
			case NOUP:
				if (isspace(str[i]) || ispunct(str[i])) {
					STATE = NOUP;
				}
				else if (islower(str[i]) || isupper(str[i])) {
					STATE = UP;
					i--;
				}
				break;
			case UP:
				 if (isupper(str[i])) {
					STATE = UP;
					flag = 0;
				}
				else if (flag == 1) {
					str[i] = toupper(str[i]);
					flag = 0;
					STATE = UP;
				}
				else if (isspace(str[i]) || ispunct(str[i])) {
					STATE = NOUP;
					flag = 1;
				}

				break;
		}
	}
}
void main1() {
	string str1;
	getline(cin , str1);
	upperTheFirstLetter(str1);
	cout << str1 << endl;  
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值