C语言问题:将一字符串按ASCII大小排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言问题:将一字符串按ASCII大小排序相关的知识,希望对你有一定的参考价值。
main()
char a[260] ;
int i,j,k;
printf("please enter:");
gets(a);
for(i=0;a[0]!='\0'; )
for(j=0
;a[j]!='\0';j++)
if(a[i]>a[j]) i=j;
printf("%c",a[i]);
for(k=i;a[k]!='\0';k++) a[k]=a[k+1];
getch();
为什么当我输入的字符串的最后一个是最大的时候程序运行正常 但是最后一个不是字符串中的最大的就会出现死循环???
如hasdhsdkfhdz对的 但是sjaoidjiaosdjsdozkokp不对
谢谢
就是输入一个字符串 再将字符串按ascii值大小排序
把for(i=0;a[0]!='\0'; )改为for(i=0;a[0]!='\0';i=0 )就好了。
(好吧,我很啰嗦,希望讲清楚了~) 参考技术A 1.
字符a和'a'的区别是什么,
a是个变量
'a'是一个字符
2.
字符加单引号和不加单引号的区别是什么,
有单引号是字符常量,没有,只能是个变量符号
3.
'a-a'是代表什么
这么写是错的,可以写成a-'a'
这表示得到a在字母中的序号,如a='a'
则,a-'a'=0 参考技术B 没看懂你想干什么
字符串数组排序(C语言)(qsort库函数)
for(i=1;i<=n;i++)
scanf("%s",f[i]);
怎么使用库函数qsort对F[I]进行排序?要求长度短的在前,长度相同的以首字符排序(字符串中只存在0~9十个数字)
声明一个字符串指针数组存放每个字符串的首地址,调用库函数qusort按题目要求对字符串指针排序,不移动源字符串。关键是要设计一个好的比较函数,精巧地解决“按长度、长度相等时按大小”排序的问题。举例代码如下:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 10 //字符串个数
#define LN 21 //限制字符串长度为20
int mycmp(const void *a,const void *b)//比较函数
char *pa=*(char **)a,*pb=*(char **)b;
int x=int(strlen(pa)-strlen(pb));//依长度比较
return x ? x : strcmp(pa,pb);//长度相等时依大小比较
int main(void)
int i=0,j=0;
char *f[N],w[LN*N];//声明指针数组f和字符串总空间
printf("Input %d string(s)(length<=%d)...\\n",N,LN);
while(i<N)//输入并将字符串首址赋给f[i]
if(scanf(" %[1234567890]",f[i]=w+j)>0 && strlen(f[i])<LN)
i++,j+=LN;
else printf("Error, redo: Required length less than %d:",LN);
qsort(f,N,sizeof(char *),mycmp);//调用库函数对字符串指针排序
for(i=0;i<N;printf("%s\\n",f[i++]));//输出...
return 0;
参考技术A qsort是通过你自己的比较函数进行排序,也就是说你必须自己写比较函数,两个字符窜的比较,然后按照qsort的格式填进去,调用函数快速排序就可以了。假设width为每个字符串长度,compare_fun为比较函数,则:qsort(&f[0],10,width,compare_fun);
但是qsort函数的定义:void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
第三个参数是每个元素的长度,对于不是定长的字符串是无法比较的(好像是这样的,变长的我没有试过。。你也可以试一试用sizeof)。所以最多能够进行等长的字符串比较。相信比较函数楼主能够自己完成。 参考技术B #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
#define SIZE 100
int cmpOne(const void *a, const void *b)
char *p = (char *)a;
char *q = (char *)b;
int m = strlen(p);
int n = strlen(q);
if (m != n)
return (m - n);//按串长排序,由小到大
else
return (*p - *q);//按首字母排序,由小到大
void main(void)
int i;
char str[SIZE][SIZE];
for (i=0; i<N; i++)
scanf("%s", str[i]);
qsort(str, N, SIZE, cmpOne);
for (i=0; i<N; i++)
puts(str[i]);
printf("\n");
参考技术C 假设一个字符串最大长度100
qsort(f,n,sizeof(char)*100,comp);
int comp(const void *a,const void *b )
if(strlen((char*)a)<strlen((char*)b))
return 1;
else if(strlen((char*)a)==strlen((char*)b))
return strcmp((char*)a,(char*)b));
else
return 0;
//没经过验证 参考技术D 新鲜出炉:
#include "stdio.h"
#include "string.h"
#include <stdlib.h>
#define N 5 /*字符串个数*/
#define MAXLEN 30 /*字符串最大长度*/
int CompareStrLen( const void * s1, const void * s2)
char * r1, * r2;
r1 = (char *)s1;
r2 = (char *)s2;
/*比较字符串长度*/
if (strlen(r1)>strlen(r2))
return 1;
else if (strlen(r1) < strlen(r2))
return -1;
else
return 0;
int CompareHeaderChar(const void * s1, const void * s2)
char * r1, * r2;
r1 = (char *)s1;
r2 = (char *)s2;
//比较首字母
if (*r1 > *r2)
return 1;
else if ( *r1 < *r2)
return -1;
else
return 0;
int main()
const int n=N;
char f[n][MAXLEN];
int k=0, numOfSamelength=1;
/*输入*/
for(int i=0;i<n;i++)
printf("输入一串数字:");
scanf("%s",f[i]);
/*根据字串长度排序*/
qsort((void *)f, n, sizeof(char [MAXLEN]), CompareStrLen);
printf("\n按照长度排序的结果:\n");
for(i=0;i<n;i++)
printf("输出:");
printf("%s\n",f[i]);
/*相同长度,根据首字母排序*/
do
while( (k<n-1) && (strlen(f[k]) == strlen(f[k+1])))/*计算相邻具有相同长度的字串的个数*/
numOfSamelength ++;
k++;
/*把字符串数组按照相同长度的一段,根据首字符进行排序*/
qsort((void *)(f+k-numOfSamelength+1), numOfSamelength, sizeof(char [MAXLEN]), CompareHeaderChar);
/*下一段开始,初始化计数器*/
numOfSamelength=1;
k++; /*下一段字符串对应的下标*/
while (k<n);
printf("\n长度相同字符串按首字符排序的结果:\n");
for(i=0;i<n;i++)
printf("输出:");
printf("%s\n",f[i]);
return 0;
/* 运行结果:
输入一串数字:1
输入一串数字:8
输入一串数字:28456
输入一串数字:52
输入一串数字:25
按照长度排序的结果:
输出:8
输出:1
输出:52
输出:25
输出:28456
长度相同字符串按首字符排序的结果:
输出:1
输出:8
输出:25
输出:52
输出:28456
*/本回答被提问者和网友采纳
以上是关于C语言问题:将一字符串按ASCII大小排序的主要内容,如果未能解决你的问题,请参考以下文章
C语言问题:输入一行字符串,然后按照ASCII码大小进行升序排序。
如何用C语言编程将字符串s中的所有字符按ASCII值从小到大重新排序后输出字符串?