hihoCoder #1197 Give My Text Back

Description

To prepare for the English exam Little Ho collected many digital reading materials. Unfortunately the materials are messed up by a malware.

It is known that the original text contains only English letters (a-zA-Z), spaces, commas, periods and newlines, conforming to the following format:

1. Each sentence contains at least one word, begins with a letter and ends with a period.

2. In a sentence the only capitalized letter is the first letter.

3. In a sentence the words are separated by a single space or a comma and a space.

4. The sentences are separated by a single space or a single newline.

It is also known the malware changes the text in the following ways:

1. Changing the cases of letters.

2. Adding spaces between words and punctuations.

Given the messed text, can you help Little Ho restore the original text?

Input

A string containing no more than 8192 English letters (a-zA-Z), spaces, commas, periods and newlines which is the messed text.

Output

The original text.

Sample Input

my Name  is Little   Hi.
His   name IS Little ho  ,  We are   friends.

Sample Output

My name is little hi.
His name is little ho, we are friends.

Solution:

 1 #include <cstdio>
 2 #include <cstring>
 3 #define MAXN 10000
 4 
 5 char toUpper(char c) {
 6     if (c >= 'A' && c <= 'Z') return c;
 7     else return 'A' + (c - 'a');
 8 }
 9 
10 char toLower(char c) {
11     if (c >= 'a' && c <= 'z') return c;
12     else return 'a' + (c - 'A');
13 }
14 
15 int main() {
16     char buf[MAXN];
17     char text[MAXN];
18     while (fgets(buf, MAXN, stdin)) {
19         //printf("%s\n", buf);
20         int len = strlen(buf);
21         int idx = -1;
22         int k = 0;
23         int flag = true;
24         for (int i = 0; i < len; ++i) {
25             
26             if ((buf[i] >= 'a' && buf[i] <= 'z') || buf[i] >= 'A' && buf[i] <= 'Z') {
27                 if (idx >= 0) {
28                     k = idx + 1;
29                     idx = -1;
30                 }
31                 if (flag) {
32                     text[k++] = toUpper(buf[i]);
33                     flag = false;
34                 }
35                 else 
36                     text[k++] = toLower(buf[i]);
37             }
38             else if (buf[i] == ' ') {
39                 if (idx < 0) {
40                     idx = k;
41                 }
42                 text[k++] = buf[i];
43             }
44             else if (buf[i] == ',') {
45                 if (idx >= 0) {
46                     k = idx;
47                     idx = -1;
48                 }
49                 text[k++] = buf[i];
50             }
51             else if (buf[i] == '.') {
52                 if (idx >= 0) {
53                     k = idx;
54                     idx = -1;
55                 }
56                 text[k++] = buf[i];
57                 flag = true;
58             }
59             else text[k++] = buf[i];
60             
61         }
62         text[k] = '\0';
63         printf("%s", text);
64     }
65 
66 }

 

posted @ 2015-10-28 12:56  HaruHaru  阅读(846)  评论(0编辑  收藏  举报