此题用字符来解决即可,但就是要考虑周全,陷阱比较多。
代码实现:
- #include<iostream>
- #include<string>
- using namespace std;
- char change(char c)
- {
- if(c>='a'&&c<='z')
- return (c-32);
- else if(c>='A'&&c<='Z')
- return c;
- }
- int main()
- {
- int t;
- char a[200];
- cin>>t;
- getchar();
- for (int j=0;j<t;j++)
- {
- gets(a);
- int n = strlen(a);
- if(n==1) //只有一个字母时
- cout<<change(a[0])<<endl;
- else
- {
- for (int i=1;i<n;i++)
- {
- if(a[i-1]==' '&&a[i]!=' ') //保证判断有多个空格的时候也输出正确
- cout<<change(a[i]);
- if(a[i-1]!=' '&&i==1) //输出第一个单词的第一个字母,并判断单词前有空格的情况
- cout<<change(a[i-1]);
- }
- cout<<endl;
- }
- memset(a,0,sizeof(a));
- }
- return 0;
- }
另一种更简单明了的做法:
#include <iostream>
#include <stdio.h>
#include <cstring>
using
namespace std;
int
main() {
int
t; char
s[100]; cin >> t;
getchar();
//把缓冲区的\n读取掉 while(t--)
{
gets(s);
strupr(s);
//把所有字母换成大写
if(s[0] !=
' ') printf("%c", s[0]);
for(int
i = 1 ; i < strlen(s) ; i++)
{
if(s[i] !=
' ' && s[i-1] ==
' ') printf("%c",
s[i]); }
printf("\n");
//getchar();
}
}
1万+

被折叠的 条评论
为什么被折叠?



