Loading

P1249-首字母大写

P1249-首字母大写
Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample
Input

i like acm
i want to get an accepted

Output

I Like Acm
I Want To Get An Accepted

思路概况

这是一道比较典型的字符串问题,着重考虑题目中的细节问题

  • 单个字符出现在段中如何解决
  • 首字符原本就是大写如何解决

除此之外,由于是除此涉及算法题目,通过这道题,我们也可以学习到

  • C++ String变量的输入输出
  • C++ String变量的判空和置空

代码编写

ASCII码解题

#include<stdio.h>
int main(){
	char s[100];
	while(gets(s)){
		int len = strlen(s);
		if(s[0]!=' '||s[0]!='\n'||s[0]!='\t')
			s[0]=s[0]-32;
		for(int i=1;i<len;i++)
			{		
				int flag=0;
				if(s[i]>='a'&&s[i]<='z')
					flag=1;
				if((s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i+1]!=' '||s[i+1]!='\n'||s[i+1]!='\t')&&flag)
				{
					s[i]=s[i]-32;
				}
				else if(i!=len&&(s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i]!=' '||s[i]!='\n'||s[i]!='\t')&&flag)
				{
					s[i]=s[i]-32;
				}
			}
		for(int i=0;i<len;i++)
			{
				printf("%c",s[i]);	
			}
		printf("\n");
	}
	return 0;
}

String变量解题

#include<bits/stdc++.h>
using namespace std;
//字符串解决首字母大写问题 
int main(){
	string s;
	while(getline(cin,s)){
	if(s[0]==' '||s[0]=='\n'||s[0]=='\t'||s.empty())
	break;
	int len=s.length();
	if(s[0]!=' '||s[0]!='\n'||s[0]!='\t')
		s[0]=s[0]-32;
	for(int i=1;i<len;i++)
		{		
			int flag=0;
			if(s[i]>='a'&&s[i]<='z')
				flag=1;
			if((s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i+1]!=' '||s[i+1]!='\n'||s[i+1]!='\t')&&flag)
			{
				s[i]=s[i]-32;
			}
			else if(i!=len&&(s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i]!=' '||s[i]!='\n'||s[i]!='\t')&&flag)
			{
				s[i]=s[i]-32;
			}
			}
		cout<<s<<endl;
	s.clear();
	}
}

收获总结

  1. C语言中,循环读入带空字符串使用的是gets()函数,而在C++中,我们可以使用string变量的getline()函数来解决这个问题;
  2. C++中判断String变量是否为空,我们可以使用s.empty()函数;
  3. C++中清空String变量,我们可以使用s.clear()函数;
  4. C++中判断String变量长度,我们可以使用s.length()函数;而在C语言中,我们可以使用strlen()函数;
posted @ 2023-01-14 21:02  nliuc  阅读(27)  评论(0编辑  收藏  举报