Timus 1601. AntiCAPS 要求把一段大写英文字母的文本转换为适当的小写英文字母。
1601. AntiCAPS
Time Limit: 0.5 second
Memory Limit: 64 MB
The blonde Angela has a new whim: internet chats. Of course, as any blonde, she writes her messages using the upper case. You are the moderator of Angela's favorite chat and you're fed up with her upper-case messages. The problem is that Angela does not respond to your warnings. You decided to write a simple antiCAPS corrector, which would make Angela's messages readable.
The correction rules are very simple:
- Sentences in a message consist of words, spaces and punctuation marks.
- Words consist of English letters.
- Sentences end with a full stop, exclamation mark, or question mark.
- The first word of each sentence must start with a capital letter, and all other letters of the sentence must be lowercase.
Input
You are given Angela's message, which consists of uppercase English letters, spaces, line breaks and punctuation marks: full stops, commas, dashes, colons, exclamation and question marks. Total length of message is not exceeding 10000 symbols.
Output
Output the corrected message.
Sample
input |
output |
HI THERE! HOW DID YOU KNOW I AM A BLONDE? |
Hi there! How did you know i am a blonde? |
Problem Author: Denis Musin
Problem Source: IX USU Open Personal Contest (March 1, 2008)
答案如下(C#语言):
1
using
System;
2
3
namespace
Skyiv.Ben.Timus
4
{
5
sealed
class
T1601
6
{
7
static
void
Main()
8
{
9
int
v;
10
bool
isCap
=
true
;
11
while
((v
=
Console.In.Read())
!=
-
1
)
12
{
13
char
c
=
(
char
)v;
14
if
(c
==
'
.
'
||
c
==
'
!
'
||
c
==
'
?
'
) isCap
=
true
;
15
else
if
(isCap
&&
char
.IsUpper(c)) isCap
=
false
;
16
else
if
(
!
isCap
&&
char
.IsUpper(c)) c
=
char
.ToLower(c);
17
Console.Write(c);
18
}
19
}
20
}
21
}
下面是C语言的版本:
1
#include
<
stdio.h
>
2
3
int
main()
4
{
5
int
c, isCap
=
1
;
6
while
((c
=
getchar())
!=
EOF)
7
{
8
if
(c
==
'
.
'
||
c
==
'
!
'
||
c
==
'
?
'
) isCap
=
1
;
9
else
if
(isCap
&&
isupper(c)) isCap
=
0
;
10
else
if
(
!
isCap
&&
isupper(c)) c
=
tolower(c);
11
putchar(c);
12
}
13
}