输入个数不限的数字,以逗号为分隔,以回车键为结束,排序后以4个数每行输出
2017-03-29 16:31
302 查看
/* 输入个数不限的数字,以逗号为分隔,以回车键为结束,数字大小在-32768-32767之间。从小到大排序后以4个数每行输出 如: 输入:12,34,-12,23,123,56,-9,789 输出:-12 -9 12 23 34 56 128 789 */ #include <stdio.h> #include<stdlib.h> #include <string.h> #define INITSIZE 100 #define INCREMENT 5 int my_atoi(char *s); int main() { char *s,*p,*q,*r;//输入字符串 s=(char*)malloc(INITSIZE*sizeof(char)); int *num;//排序后的字符串 int i=0,j=0,m=0,n=0,length=0; printf("请输入以逗号为分隔符的字符串,回车表示结束:"); //获取字符串长度 while(1){ if(i>=INITSIZE)//实现无限输入 { s=(char*)realloc(s,(INITSIZE+INCREMENT)*sizeof(char)); } s[i] = getchar();//逐个输入字符并赋值到字符串中。 if(s[i] == '\n')//用回车表示输入结束 { s[i]='\0';//修改为字符串结束符 break;//退出循环。 } i++; } length=strlen(s);//得到输入字符串的长度 num=(int*)malloc(length*sizeof(int));//为数组申请空间 i=0; p=s; while(i<length) { if(s[i]<-32768||s[i]>32767) { printf("数据非法!"); system("pau 4000 se"); return 0; } if(s[i] == ','){ i++; p++; } if(s[i] != ','){ q=(char*)malloc(INITSIZE*sizeof(char)); q=p; r=q; while(s[i] != ','&&s[i] != '\0'){ i++; p++; q++; } q='\0'; ++j; num[j]=my_atoi(r);//将字符串转化为数字,将数字存入数组,j从1开始,第一个位置空出来作为哨兵 } } //直接插入排序 for(m=2;m<=j;++m) { if(num[m]<num[m-1]) { num[0]=num[m];//哨兵单元 num[m]=num[m-1]; for(n=m-2;num[0]<num ;--n) num[n+1]=num ; num[n+1]=num[0]; } } //输出字符 if(j>1){ for(int k=1;k<=j;k++){ printf("%d\t",num[k]); if(k%4==0) printf("\n"); } } system("pause"); return 0; } int my_atoi(char *q) { int num, i; char ch; num = 0; for (i = 0; i<strlen(q); i++) { ch = q[i]; if (ch < '0' || ch > '9') break; num = num*10 + (ch - '0'); } return num; }
相关文章推荐
- 汇编语言 编写程序,如果输入的是大写字母,则输出对应的小写字母;如果输入的是小写字母,则输出对应的大写字母;如果输入的是数字,原样输出;按回车结束
- 笔试题:输入一串数字,以逗号隔开,将数字排序后输出
- 输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
- 输入以逗号分隔的整数,如123,234,345,456,111等,并以回车结束输入
- 输入一个字符,字母输出‘c’,数字输出本身,回车结束(8086汇编)
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 分享一个很实用的代码,可以将以逗号分隔的数字以从大到小的方式排序后返回
- 我的一个数组字符排序(输入可以用回车结束)
- 【c语言】输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如:1990->1 9 9 0
- 分享一个很实用的java代码,可以将以逗号分隔的数字以从大到小的方式排序后返回
- 输入一个4位数,要求输出这4个数字字符,每两个数字间空一个空格。求解惑。哪里不对?
- 命令行输入数字,用空格分隔并输出和
- 三个数排序。要求输入三个整数,按逗号隔开,把它们从小到大排列,输出结果用空格隔开。
- 从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示出这三类的计数结果
- 用Java 编一段代码,实现在控制台输入一组数字后,排序后在控制台输出
- 键盘输入数字,自动排序后输出
- 输入一串字符,分别输出字母 数字 符号的个数,以$结束
- 气泡法排序,输入5个int数字,由小到大输出
- 输入数据 回车结束 基数偶数分开排序
- 较长数字要格式化输出,逗号三位一分隔。