C语言编程:主函数输入一行有空格和数字的字符串,求这行字符串的缩写,怎么编?

要求:
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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-19

代码文本:

#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;

}

本回答被提问者和网友采纳