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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM