2017final英文语句格式简单检查

英文书写中,句首字母通常为大写,其余为小写,单词“I”除外,单词与单词之间用一个空格隔开,句中用“,”断句,句末用“.”结束,“,”和“.”与其前置单词间无需空格隔开。 Word等文本编辑器通常根据以上规则,对我们输入的英文语句进行自动修正。 请编写一个功能,可对输入的一句英文句子,根据以上规则,修订为正确格式后输入。 例如,对于输入的英文句子“This is an Example with one mistake.”, 由于单词“Example”中的字符"E"应该为小写"e",所以修订后输出该句子的正确格式 This is an example with one mistake.

注意:

1、 每组测试数据仅包括一个以字符“.”结束的英文句子。

2、 输入的英文句子中出现的字符包括二十六个大写英文字母(ASCII码65~90),二十六个小写英文字母(ASCII码97~122),“,”和“.”,空格字符。

 

测试用例:

an I i ,, , i,i,  i  i i,I,I  I  I  I,  aN,n,iI, iI  iI,.

 输出结果:

An I I, I, I, I I I, I, I I I i, an, n, iI, iI iI.

 

 

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     char *transform(char *);                        //用于大小写的转换
 8     string str, result, space(" "), point(".");     //str用于输入,result用于接收结果,space用于添加空格,point用于添加句号
 9     bool flag(true);                                //flag用于判断是否刚出现过逗号(即是否需要添加空格)
10     int pos(0);                                     //pos指向正在被判断的字母
11     getline(cin, str);
12 
13     if('a' <= str[pos] && str[pos] <= 'z')          //首字母是否为大写
14         result.append(transform(&str[pos]), 1);
15     else
16         result.append(&str[pos], 1);                //
17 
18     while(str[++pos] != '.')                        //对每一个字母进行检查,句号不检查
19     {
20         if(!flag && str[pos] != ' ')                //如果刚出现逗号且正在判断的字母不为空格,则添加空格
21         {
22             result.append(space);
23             flag = true;
24         }
25 
26         if(flag)
27         {
28             if(str[pos] == 'I' && (str[pos - 1] == ' ' || str[pos - 1] == ',') && (str[pos + 1] == ' ' || str[pos - 1] == ',' || str[pos - 1] == '.')) //如果I为大写,且是单独字符,直接输出
29             {
30                 result.append(&str[pos], 1);
31             }
32             else if(str[pos] == 'i' && (str[pos - 1] == ' ' || str[pos - 1] == ',') && (str[pos + 1] == ' ' || str[pos + 1] == ',' || str[pos + 1] == '.')) //如果i为小写,且是单独字符,转换后输出
33             {
34                 result.append(transform(&str[pos]), 1);
35             }
36             else if('A' <= str[pos] && str[pos] <= 'Z')     //如果字母为大写,则转换后输出
37             {
38                 result.append(transform(&str[pos]), 1);
39             }
40             else if(str[pos] == ',')                        //如果字母为','
41             {
42                 for(int i(1); str[pos + i] != '.'; i++)     //判断:1.如果之后为空格,则继续向后移动 2.如果之后为','、'.',则将pos位移至该符号 3.如果为大写或小写,则直接输出逗号
43                 {
44                     if(str[pos + i] == ' ')
45                         continue;
46                     else if(str[pos + i] == ',' || str[pos + i] == '.')
47                     {
48                         pos += i - 1;
49                         break;
50                     }
51                     else
52                     {
53                         result.append(&str[pos], 1);
54                         flag = false;
55                         break;
56                     }
57                 }
58             }
59             else if(str[pos] == ' ')    //如果字母为空格
60             {
61                 for(int i(1); str[pos + i] != '.'; i++) //判断:1.如果之后为空格,则继续向后移动 2.如果之后为','、'.',则将pos位移至该符号 3.如果之后为字母,则输出空格并将pos位移至该字母
62                 {
63                     if(str[pos + i] == ' ')
64                         continue;
65                     else if(str[pos + i] == ',' || str[pos + i] == '.')
66                     {
67                         pos += i - 1;
68                         break;
69                     }
70                     else
71                     {
72                         result.append(space);
73                         pos += i - 1;
74                         break;
75                     }
76                 }
77             }
78             else        //如果判断字符为小写字母,则直接输出
79             {
80                 result.append(&str[pos], 1);
81             }
82         }
83     }
84 
85     result.append(point);   //结尾添加句号
86     cout << result;
87     return 0;
88 }
89 
90 char *transform(char *ch)
91 {
92     if('A' <= *ch && *ch <= 'Z')
93         *ch += 32;
94     else if('a' <= *ch && *ch <= 'z')
95         *ch -= 32;
96 
97     return ch;
98 }

 

posted @ 2019-05-01 09:38  菜鸟plus  阅读(1404)  评论(0编辑  收藏  举报