本文介绍了C-具有可变数量的参数和命令行参数的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要按字典顺序对 n 个字符串进行排序,这些字符串是具有可变数量参数的函数的参数。在 main 函数中,将字符串作为命令行参数读取。
I need to sort n number of strings lexicographically that are arguments of a function with variable number of arguments. In main function, strings are read as command line arguments.
这是我的代码:
#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 函数中的命令行参数并按顺序打印它们吗?
How to read n strings as command line arguments in main function and print them sorted?
此外,我遇到了一个错误在函数 sort()-无链接的args的声明中。
Also, I am am getting an error in function sort() - redeclaration of args with no linkage.
推荐答案
#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; }
执行示例:
Execution example:
>a.out a B c Z x y a B c x y Z
这篇关于C-具有可变数量的参数和命令行参数的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!