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