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 }

 

转载于:https://www.cnblogs.com/liew/p/4916977.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值