Ich muss n
Anzahl der lexikografischen Strings sortieren, die Argumente einer Funktion mit variabler Anzahl von Argumenten sind. In main
Funktion werden Zeichenfolgen als Befehlszeilenargumente gelesen.C - Funktion mit variabler Anzahl von Argumenten und Befehlszeilenargumenten
Hier ist mein Code:
#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;
}
Wie n
Strings als Befehlszeilenargumente in main
Funktion zu lesen und sie sortiert drucken?
Auch bekomme ich einen Fehler in der Funktion sort()
- redeclaration of args with no linkage
.
Sie Befehlszeilenargumente oder Benutzereingaben bedeuten Sie? – ChiefTwoPencils
@ChiefTwoPencils, Befehlszeilenargumente. – ufo
Sie können es nicht tun - nun, nicht ohne erpresserische Schmerzen und eine spezielle Bibliothek. Übergeben Sie das Array von der Befehlszeile an eine geänderte Sortierfunktion, die ein Array verwendet. Der ursprüngliche Code kann dann diese andere Funktion verwenden, um das Array, das er erstellt, aus einer Variablenargumentliste zu sortieren. Das grundlegende Problem besteht darin, dass Sie in einer Funktionsaufruf-Argumentliste zur Laufzeit keine variable Anzahl von Argumenten erstellen können. (Es ist jedoch nicht wirklich klar, was Ihre Sortierfunktion vorhat. Sie sortiert einige Daten, tut aber nichts mit den sortierten Daten.) –