7-3 2017final英文语句格式简单检查 (30 分)
英文书写中,句首字母通常为大写,其余为小写,单词“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),“,”和“.”,空格字符。
输入格式:
以字符“."为结束字符的一个英文句子。
输出格式:
输入英文句子经过格式纠错后的输出。
输入样例:
This is an Example with one mistake.
输出样例:
This is an example with one mistake.
作者
YU
单位
福州大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<iostream>
#include<string>
using namespace std;
int main()
{
char *transform(char *);
string str, result, space(" "), point(".");
bool flag(true);
int pos(0);
getline(cin, str);
if('a' <= str[pos] && str[pos] <= 'z')
result.append(transform(&str[pos]), 1);
else
result.append(&str[pos], 1);
while(str[++pos] != '.')
{
if(!flag && str[pos] != ' ')
{
result.append(space);
flag = true;
}
if(flag)
{
if(str[pos] == 'I' && (str[pos - 1] == ' ' || str[pos - 1] == ',') && (str[pos + 1] == ' ' || str[pos - 1] == ',' || str[pos - 1] == '.'))
{
result.append(&str[pos], 1);
}
else if(str[pos] == 'i' && (str[pos - 1] == ' ' || str[pos - 1] == ',') && (str[pos + 1] == ' ' || str[pos + 1] == ',' || str[pos + 1] == '.'))
{
result.append(transform(&str[pos]), 1);
}
else if('A' <= str[pos] && str[pos] <= 'Z')
{
result.append(transform(&str[pos]), 1);
}
else if(str[pos] == ',')
{
for(int i(1); str[pos + i] != '.'; i++)
{
if(str[pos + i] == ' ')
continue;
else if(str[pos + i] == ',' || str[pos + i] == '.')
{
pos += i - 1;
break;
}
else
{
result.append(&str[pos], 1);
flag = false;
break;
}
}
}
else if(str[pos] == ' ')
{
for(int i(1); str[pos + i] != '.'; i++)
{
if(str[pos + i] == ' ')
continue;
else if(str[pos + i] == ',' || str[pos + i] == '.')
{
pos += i - 1;
break;
}
else
{
result.append(space);
pos += i - 1;
break;
}
}
}
else
{
result.append(&str[pos], 1);
}
}
}
result.append(point);
cout << result;
return 0;
}
char *transform(char *ch)
{
if('A' <= *ch && *ch <= 'Z')
*ch += 32;
else if('a' <= *ch && *ch <= 'z')
*ch -= 32;
return ch;
}