此题用字符来解决即可,但就是要考虑周全,陷阱比较多。
代码实现:
- #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();
}
}