The blonde Angela has a new whim: internet chats. Of course, as any blonde, she writes her messages using the upper case. You are the moderator of Angela‘s favorite chat and you‘re fed up with her upper-case
messages. The problem is that Angela does not respond to your warnings. You decided to write a simple antiCAPS corrector, which would make Angela‘s messages readable.
The correction rules are very simple:
- Sentences in a message consist of words, spaces and punctuation marks.
- Words consist of English letters.
- Sentences end with a full stop, exclamation mark, or question mark.
- The first word of each sentence must start with a capital letter, and all other letters of the sentence must be lowercase.
Input
You are given Angela‘s message, which consists of uppercase English letters, spaces, line breaks and punctuation marks: full stops, commas, dashes, colons, exclamation and question marks. Total length
of message is not exceeding 10000 symbols.
Output
Output the corrected message.
Sample
input | output |
---|---|
HI THERE! HOW DID YOU KNOW I AM A BLONDE? |
Hi there! How did you know i am a blonde? |
就是修正个全是大写的句子。
这里注意一点(as in codes‘ comment):
keep the state, because blonde would do anything, and put the comma, in one line, and start typing another line.
#include <string> #include <iostream> using namespace std; void toLowerCase(string &s, bool &senBegin) { for (unsigned i = 0; i < s.size(); i++) { if (‘ ‘ == s[i]) continue; if (senBegin) { if (‘A‘ <= s[i] && s[i] <= ‘Z‘ || ‘a‘ <= s[i] && s[i] <= ‘z‘) { s[i] = toupper(s[i]); senBegin = false; } continue; } if (‘.‘ == s[i] || ‘?‘ == s[i] || ‘!‘ == s[i]) senBegin = true; s[i] = tolower(s[i]); } } int AntiCAPS1601() { string s; bool senBegin = true;//keep the state, because blonde would do anything, and put the comma, in one line, and start typing another line. while (getline(cin, s)) { toLowerCase(s, senBegin); cout<<s<<endl; } return 0; }