我需要按字典顺序对dona45, donas1, dona23, donalsf1 (Valid Ones)
don2, dona212,donasase, donasese1, donasease (invalid)
个字符串进行排序,这些字符串是具有可变数量参数的函数的参数。在n
函数中,字符串被读作命令行参数。
这是我的代码:
main
如何在#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
void sort(int n,...)
{
//store optional arguments (strings) to array arr
va_list args;
va_start(args,n);
char **arr=malloc(n * sizeof(char*));
int i;
for(i=0;i<n;i++)
arr[i]=malloc((strlen(va_arg(args,char*)) + 1) * sizeof(char));
va_end(args);
//store length of each string to lenArr
//find max length and store it to temp (for sorting)
va_list args;
va_start(args,n);
int *lenArr=calloc(n , sizeof(int));
for(i=0;i<n;i++)
{
lenArr[i]=strlen(va_arg(args,char*)) + 1;
}
int max=0;
for(i=0;i<n;i++)
{
if(lenArr[i] > lenArr[max])
max=i;
}
int maxLen;
maxLen=lenArr[max];
char *temp=calloc(maxLen * sizeof(char));
va_end(args);
//sort array arr lexicographically
int j,min;
for(i=0;i<n-1;i++)
{
for(min=i,j=i+1;j<n;j++)
if(strcmp(arr[j],arr[min]) < 0)
min=j;
if(min!=i)
{
strcpy(temp,arr[i]);
strcpy(arr[i],arr[j]);
strcpy(arr[j],temp);
}
}
}
int main(int argc,char **argv)
{
int n=3;
sort(n,argv[1],argv[2],argv[3]);//this works when n is pre-defined
return 0;
}
函数中将n
字符串作为命令行参数读取并打印出来?
另外,我在功能main
- sort()
中收到错误。
答案 0 :(得分:2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void *a, const void *b){
return strcasecmp(*(char**)a, *(char**)b);
}
void sort(int n, char *str[n]){
qsort(str, n, sizeof(char*), cmp);
}
int main(int argc, char *argv[]){
sort(argc-1, argv+1);
for(int i = 1; i < argc; ++i)
puts(argv[i]);
return 0;
}
执行示例:
>a.out a B c Z x y
a
B
c
x
y
Z