词组缩写(isalpha()的应用)

时间:2022-09-07 08:38:25
Problem Description
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。
 
Input
输入的第一行是一个整数T,表示一共有T组测试数据;
接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
 
Output
请为每组测试数据输出规定的缩写,每组输出占一行。
 
Sample Input
1
end of file
 
Sample Output
EOF
本题要考虑的情况:
   asd   asd
asd asd   asd
 
 
 #include <stdio.h>
#include <math.h>
#include <queue>
#include <vector>
#include <stack>
#include <map>
#include <string>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
char str[],s[];
int main( )
{
int t;
scanf( "%d%*c",&t );
while( t-- )
{
gets( str );
int i = ,c = ;
while( str[i] )
{
if( !isalpha( str[i] ) )//如果输入字符是一个英文字母,即 a-z或A-Z,返回非零值(具体返回多少要看系统实现),否则返回0.
{
++i;
continue;
}
if( str[i] > 'Z' )
str[i] -= ;
s[c++] = str[i];
while( isalpha( str[i] ) )
++i;
}
s[c] = ;
puts( s );
}
return ;
}
分解:
 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[],b[];
int main()
{
int T;
int i;
int len=;
int k;
scanf("%d",&T);
getchar();
while(T--)
{
gets(a);
len=strlen(a);
strupr(a);
k=;
for(i=;i<len;i++)
{
if(i==)
{
if(a[i]==' ' && a[i+]!=' ')
b[k++]=a[i+];
else if(a[i]!=' ')
b[k++]=a[i];
}
else
{
if(a[i]==' ' && a[i+])
b[k++]=a[i+];
}
}
for(i=;i<k;i++)
{
if(b[i]!=' ')
printf("%c",b[i]);
}
printf("\n");
}
return ;
}