要求:
1)在主函数中输入字符串,有空格数字和字母。
2)自定义函数char *strToS(char *str)形成缩写。缩写规律:A)提取每个单词的第一个字母形成缩写;B)数字开头或长度不足4个字母的单词不进入缩写。
3)缩写结果以大写存放在输入字串的数组中。
4)在主函数中输出。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *p = "无法生成缩写词!";
char s[10001], buf[10001];
char * strTos(char *str) {
if (strlen(str) < 4)
return p;
int word = 0, len = 0, i = 0;
char *t = str, temp;
while (*t) {
if (*t == ' ' || *t == '\n') {
word = 0;
if (len >= 4 && isalpha(temp)) {
buf[i++] = toupper(temp);
len = 0;
}
}
else if (word == 1) {
len++;
}
else if (word == 0) {
temp = *t;
word = 1;
len = 1;
}
t++;
}
if (i == 0)
return p;
return buf;
}
int main(void) {
char *r;
fgets(s, 10001, stdin);
r = strTos(s);
puts(r);
return 0;
}
代码文本:
#include "stdio.h"
#define N 300
char *strToS(char *str){
char s[N>3 ? N/3 : 1],t[25],*pend,*p;
int i,j,k,n;
for(pend=str;*pend;pend++);//求str长度,记结束地址
for(pend--,s[j=0]='\0',p=str;p<pend;p+=n){
sscanf(p,"%s%n",t,&n);
for(k=0;t[k];k++);
if(k>3 && (t[0]>='a' && t[0]<='z' || t[0]>='A' && t[0]<='Z'))
s[j++]=t[0]&0xDF;//记录缩写并变成大写
}
for(s[j]=i=0;str[i]=s[i];i++);
return str;
}
int main(int argc,char *argv[]){
char str[N];
printf("Please enter a string contain Spaces and figures...\n");
fgets(str,N,stdin);
printf("\nAbbreviations results: '%s'\n",strToS(str));
return 0;
}
本回答被提问者和网友采纳