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

总结:用有穷状态自动机写了个程序,算是对它的复习吧!~其实也是想试试。学到东西还是挺多的,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;  
}

猜你喜欢

转载自blog.csdn.net/qq_34269988/article/details/84488542
今日推荐