C语言:从键盘输入一个不超过100个字符的字符串,其中字符串只包括字母、数字、空格三种字符。

从键盘输入一个不超过100个字符的字符串,其中字符串只包括字母、数字、空格三种字符,要求设计一个程序完成如下功能:
(1)从字符串中提取所有连续数字,并且每段连续数字构成一个整数,将结果输出到屏幕上,要求每个整数占10列,右对齐。
(2)对提取的所有整数按从小到大排序,将排序结果输出到屏幕上,要求每个整数占10列,左对齐,每行输出5个整数
(3)从字符串中提取所有连续的字母字符,并且每段连续的字母字符构造成一个字符串,将结果输出到屏幕上,要求每个字符串占一行
(4)对提取的所有字符串按从大到小排序,将排序后的结果输出到屏幕上,要求每个字符串占一行
只写出来一个也没问题,楼主在线等,急求....

1、首先需要打开编程软件。

2、输入以下程序:#include <stdio.h>int main(){ char str[40]; scanf("%s",&str); printf("%s",str); return 0;}。

3、然后按F5运行程序。

4、然后输入想要输入的字符串

5、按回车键,就会弹出你输入的字符串。

6、注意字符串的大小,改变中括号中的数字改变输入字符串的大小。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16

#include<stdio.h>
#include<string.h>
int letter(char c)
{
 if(('a'<=c&&c<='z')||('A'<=c&&c<='Z'))
  return 1;    //字母返回1
 else
  return 0;   //不是字母返回0
}
main()
{
 char s[100],temp[100];
 char str[50][100];
 int i=0,j=0,k=0;
 int flag=0;
 printf("input : \n");
 scanf("%[^\n]s",s);    //注意这里"%[^\n]s",读到\n为止,也就是读一行
 while(s[i]!='\0')  //提取字符串
 {
  if(letter(s[i])==1)  //是字母
  {
   flag=1;    //连续字母标记
   str[j][k]=s[i];
   if(s[i+1]=='\0')
   {
    str[j][k+1]='\0';
    j++;
   }
   i++;
   k++;

  }
  else if(letter(s[i])==0&&flag==0)     //前面不是字母这里也不是字母
  {
   flag=0;
   k=0;
   i++;
  }
  else if(letter(s[i])==0&&flag==1)  //前面是字母此处开始不是字母
  {
   flag=0;
   str[j][k]='\0';
   k=0;
   i++;
   j++;
  }

 }
 for(i=0;i<j;i++)    //排序
 {
  for(k=i+1;k<j;k++)
  {
   if(strcmp(str[i],str[k])<0)
   {
    strcpy(temp,str[i]);
    strcpy(str[i],str[k]);
    strcpy(str[k],temp);
   }
  }
 }
 printf("output : \n");
 for(i=0;i<j;i++)  //输出
 {
  printf("%s\n",str[i]);
 }

}

这是我以前写的,可以实现(4)的功能,把排序的for循环删掉就是(3)的功能。

(1)(2)的话等一下

追问

嗯,多谢,一二题也麻烦你了....

追答

#include<stdio.h>
#include<string.h>
int shu(char *p,int *s)
{
 char *p1;
 int *s1;
 int count=0,t=0;
 p1=p;
 s1=s;
 while(*(p1-1)!='\0')     //保证可以把最后的数字也取到
 {
  if('0'<=*p1&&*p1<='9')  //是整数,把这个数存到t中
  {
   t=10*t+*p1-48;   // t*10相当于进位 -48是把 字符'0'到'9'转换为数字0到9
  }
  else
  {
   if('0'<=*(p1-1)&&*(p1-1)<='9')
   {
    *s1=t;
    t=0;
    s1++;
    count++;
   }
  }
  p1++;
 }
 return count;
}
void paixu(int *s,int count)
{
 int i,j,t;
 for(i=0;i<count;i++)
 {
  for(j=i+1;j<count;j++)
  {
   if(*(s+i)>*(s+j))
   {
    t=*(s+i);
    *(s+i)=*(s+j);
    *(s+j)=t;
   }
  }
 }
}

main()
{
 char s[100];
 int shuzu[100];
 int count,n;
 int i;
 
 printf("请输入字符串:\n");
 scanf("%[^\n]s",s);   
 printf("请选择:\n1:从字符串中提取所有连续数字……\n2:对提取的所有整数按从小到大排序……\n");
 scanf("%d",&n);
 switch(n)
 {
 case 1:
  count=shu(s,shuzu);
  for(i=0;i<count;i++)
  {
   printf("%10d",shuzu[i]);
  }
  break;
 case 2:
  count=shu(s,shuzu);
  paixu(shuzu,count);
  for(i=0;i<count;i++)
  {
   printf("%-10d",shuzu[i]);
   if(i%5==4)    //5个数换行
    printf("\n");
  }
  break;
 default:
  printf("选择错误");
 }
 printf("\n");

}

选1

选2

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网