PDA

Visualizza la versione completa : [C] Gestione stringhe e comprensione codice


mto89
02-11-2008, 12:30
ciao sono nuovo del forum e saluto tutti, vi espongo il mio problema.
ho bisogno di un ciclo che a ogni stringa dell'array attribuisce il nome "utente1" "utente2"....però proprio non riesco, ho buttato giu questo, se ci potete mettere la mani mi fareste un gran favore! (per motivi didattici non dovrei usare funzioni esterne di gestione stringhe)

#include <stdio.h>
#include <stdlib.h>

int main()
{
char UTENTI[8][7];
int k=0;
for (k=0; k<10;k++)
{
UTENTI [k]={'u','t','e','n','t','e','\0'}
}
printf("Ecco la classifica inizale: ");
for(k=0; k<10; k++)
{
printf("%s\n",UTENTI[k]);
}
system("pause");
return 0;
}


Inoltre un mio amico mi h proposto questa soluzione, che per essere funziona, ma non riesco a capire come funziona il ciclo for dove c'è:
UTENTI[k][i]=str[i];
perchè k sarebbe riferito al numero della stringa in considerazione, e l'indice i affianco a k che serve?...questa sintassi non si usa solo nella dichiarazione per esprimere di quanti caratteri i saranno le k parole?:

int main()
{
char UTENTI[8][8];
char str[] = {'u','t','e','n','t','e','0','\0'};
int k=0,i;
for (k=0; k<8;k++)
{
str[6]=(char)str[6]+1;
for (i=0;i<8;i++)
{
UTENTI[k][i]=str[i];
}
}
printf("Ecco la classifica inizale:\n ");
for(k=0; k<8; k++)
{
printf("%s\n",UTENTI[k]);
}
system("pause");
return 0;
}

mondobimbi
02-11-2008, 13:36
se UTENTI la definisci come una matrice poi non puoi più modificare il suo valore con assegnazioni del tipo
UTENTI [k]="utente";

devi usare la funzione strcpy

strcpy(UTENTI[k], "utente");
o meglio
strncpy(UTENTI[k], "utente", 7);

ciao
sergio

mto89
02-11-2008, 23:37
solo che per motivi didattici non posso usare funzioni esterne, nel secondo codice in particolare(che funziona) non capisco questo frangente:
UTENTI[k][i]=str[i]
allora k è riferito all'utent in elaborazione, mentr i che sarebbe? perchè sia che k che i variano da 1 a 8? cioè k 'ho capito, ma i come viene visto dal compilatore?

Xaratroom
02-11-2008, 23:50
void strcpy (char *destinazione, char *sorgente)
{
while (*sorgente)
{
*destinazione = *sorgente;
destinazione++;
sorgente++;
}
}


UTENTI è una matrice quindi k è l'utente e i punta alle singole lettere, di ogni nome utente.

una matrice di char puoi utilizzarla come un vettore di puntatori o meglio come un vettore di vettori...
Una stringa è un vettore di char

MItaly
02-11-2008, 23:55
Occhio...


void strcpy (char *destinazione, const char *sorgente)

se no non lo si può usare con le stringhe const, come ad esempio quelle inserite direttamente nel codice.

Xaratroom
03-11-2008, 00:04
grazie della correzione

Loading