Ich habe ein paar Probleme, wenn ich Zeiger verwende. In diesem Programm möchte ich zur Eingabe eines Textes mit ElaboraTesto
und nach mit Sdoppia
Token setzen in zwei verschiedenen Arrays:Warum werden Werte in 'main' nicht mit Zeigern geändert?
StructTesto Pari[]
, wenn ihre Länge gerade ist.StructTesto Dispari[]
wenn ihre Länge ungerade ist.
Aussehen wie es funktioniert.
Nachdem ich ordinaPari
verwenden, die Tokens entsprechend ihrer Länge sortieren müssen, aber wenn ich versuche, das Array zu drucken, das ungerade Token enthält, mit stampaStruttura
, gibt es keine Ausgabe außerdem gebe ich ungerade Wörter ein.
Ich versuche zu Debug-Programm (siehe Code unten) und ich sah, dass vara
und varb
sind immer 0.
Was bin ich?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIMMAX 100
typedef char Stringa[DIMMAX];
typedef Stringa TESTO[DIMMAX];
typedef struct{
Stringa parola;
int lunghezza;
} StructTesto;
int ElaboraTesto(TESTO, int);
void Sdoppia(TESTO, int, StructTesto[], int* , StructTesto[], int*);
void stampaStruttura(StructTesto[], int);
void ordinaPari(StructTesto[], int);
void Sdoppia(TESTO t, int l, StructTesto Pari[], int* lp, StructTesto Dispari[DIMMAX], int* ld){
int i;
StructTesto p;
int rest;
int j=0;
int k=0;
ld = &j;
lp = &k;
for(i=0; i<l; i++){
strcpy(p.parola, t[i]);
p.lunghezza = strlen(p.parola);
rest = p.lunghezza % 2;
if (rest != 0){
strcpy(Dispari[j].parola ,p.parola);
Dispari[j].lunghezza = p.lunghezza;
j++;
} else {
strcpy(Pari[k].parola , p.parola);
Pari[k].lunghezza = p.lunghezza;
k++;
}
}
*ld = j;
*lp =k;
}
void stampaStruttura(StructTesto array[], int n){
int i;
for(i=0; i<n; i++){
printf("Parola: %s\n", array[i].parola);
printf("Lunghezza: %d\n", array[i].lunghezza);
}
}
int ElaboraTesto(TESTO t, int n){
char *tokenPtr;
Stringa testo;
int i;
printf("Inserire il testo da elaborare: (MAX %d parole)\n", DIMMAX);
gets(testo);
printf("Il testo che verra' tokenizzato e' il seguente:\n%s\n", testo);
printf("I token sono:\n");
tokenPtr = strtok(testo, " ");
while(tokenPtr != NULL){
printf("%s\n", tokenPtr);
strcpy(t[i], tokenPtr);
tokenPtr = strtok(NULL, " ");
i++;
}
printf("Il testo e' composto da %d parole.\n", i);
return i;
}
void ordinaPari(StructTesto P[], int n){
int i;
StructTesto temp;
for(i=0; i<n; i++){
if(P[i].lunghezza < P[i+1].lunghezza){
temp = P[i];
P[i] = P[i+1];
P[i+1] = temp;
}
}
}
int main(int argc, char *argv[]) {
TESTO testo;
int n;
int dim;
int vara = 0;
int varb = 0;
StructTesto p[DIMMAX];
StructTesto d[DIMMAX];
n = ElaboraTesto(testo, DIMMAX);
Sdoppia(testo, n, p,&vara,d,&varb);
stampaStruttura(p, n);
ordinaPari(p,vara);
stampaStruttura(p, vara);
}
return 0;
}