Timus 1601. AntiCAPS 修正大写句子

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.
Problem illustration
The correction rules are very simple:
  1. Sentences in a message consist of words, spaces and punctuation marks.
  2. Words consist of English letters.
  3. Sentences end with a full stop, exclamation mark, or question mark.
  4. 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?

就是修正个全是大写的句子。

这里注意一点(as in codes' comment):

keep the state, because blonde would do anything, and put the comma, in one line, and start typing another line.


#include <string>
#include <iostream>
using namespace std;

void toLowerCase(string &s, bool &senBegin)
{
	for (unsigned i = 0; i < s.size(); i++)
	{
		if (' ' == s[i]) continue;
		if (senBegin) 
		{
			if ('A' <= s[i] && s[i] <= 'Z' || 'a' <= s[i] && s[i] <= 'z') 
			{
				s[i] = toupper(s[i]);
				senBegin = false;
			}
			continue;
		}
		if ('.' == s[i] || '?' == s[i] || '!' == s[i]) senBegin = true;
		s[i] = tolower(s[i]);
	}
}

int AntiCAPS1601()
{
	string s;
	bool senBegin = true;//keep the state, because blonde would do anything, and put the comma, in one line, and start typing another line.
	while (getline(cin, s))
	{
		toLowerCase(s, senBegin);
		cout<<s<<endl;
	}
	return 0;
}



由于提供的引用内容中未涉及“TIMES (.*)”的相关信息,下面基于通用的知识来解释。 ### 含义 “TIMES (.*)”通常是正则表达式的一部分。在正则表达式里,“TIMES ” 是一个普通的字符序列,它会精确匹配字符串中 “TIMES ” 这个文本;“(.*)” 是一个捕获组,其中 “.” 表示匹配除换行符以外的任意单个字符,“*” 表示前面的元素(这里是 “.”)可以出现零次或多次。所以 “(.*)” 可以匹配任意长度的字符序列(不包含换行符),并且将匹配到的内容捕获到一个组里。 ### 用法 以下是不同编程语言中使用 “TIMES (.*)” 正则表达式的示例: #### Python ```python import re text = "TIMES some random text here" pattern = r'TIMES (.*)' match = re.search(pattern, text) if match: print(match.group(1)) # 输出: some random text here ``` #### Java ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String text = "TIMES some random text here"; String pattern = "TIMES (.*)"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(text); if (m.find()) { System.out.println(m.group(1)); // 输出: some random text here } } } ``` ### 相关技术信息 - **捕获组**:在正则表达式中,圆括号 “()” 用于创建捕获组。捕获组可以将匹配到的部分提取出来,方便后续使用。例如在上面的例子中,“(.*)” 捕获到的内容可以通过相应语言的 API 进行访问。 - **贪婪匹配**:“*” 是一个贪婪量词,它会尽可能多地匹配字符。如果希望进行非贪婪匹配,可以使用 “*?” 。例如,将正则表达式改为 “TIMES (.*?)”,则会尽可能少地匹配字符。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值