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