zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    C#发邮件
    C#循环遍历mysql
    【转】C#获取当前日期时间(转)
    C#设置DataGridView控件的标题行的高度并且居中显示
    c#窗体实现验证码
    Git 常用命令清单,掌握这些,轻松驾驭版本管理
    Vue 常见面试问题,你可能都知道,但能答好吗?
    Node 爬虫,批量爬取头条视频并保存
    Node 爬虫,批量下载并保存图片
    NodeJS MySql 执行多条sql语句
  • 原文地址:https://www.cnblogs.com/wzzdeblog/p/10799178.html
Copyright © 2011-2022 走看看