n
可変数の引数を持つ関数の引数である文字列を辞書順にソートする必要があります。 main
関数では、文字列はコマンドライン引数として読み込まれます。ここでC - 可変数の引数とコマンドライン引数を持つ関数
は私のコードです:
#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;
}
main
機能にコマンドライン引数としてn
文字列を読み、ソートされたそれらを印刷する方法は?
また、機能のエラーが発生しています。sort()
- redeclaration of args with no linkage
。
次のコマンドライン引数またはユーザー入力を意味していますか? – ChiefTwoPencils
@ChiefTwoPencils、コマンドライン引数。 – ufo
あなたはそれをすることはできません - 強引な痛みや特別な図書館がないわけではありません。コマンドラインの配列を、配列をとる変更されたソート関数に渡します。元のコードは、この他の関数を使用して、可変引数リストから作成した配列の並べ替えを実行できます。基本的な問題は、実行時に関数呼び出し引数リストに可変数の引数を構築できないことです。 (しかし、あなたのソート関数が何であるかは本当に明確ではありません。いくつかのデータをソートしますが、ソートされたデータは何もしません)。 –