18/01/11 16:22
crack001
Salve ragazzi, ho problemi con un programmino, vi mostro la traccia:
Ora...io avevo pensato di contare le parole della stringa S per effettuare i vari controlli con la funzione conta(), e poi "esplorare la stringa, e alla k-esima parola iniziare a copiare i caratteri di questa parola nell'altra stringa fino allo spazio successivo quindi fine parola...ho tirato giu questo codice:
il programma dovrebbe ritornare un puntatore alla stringa W...visto che w è un vettore di caratteri e quindi punta al suo primo elemento faccio "return w"...quando mando la stampa dal main del contenuto del puntatore, nel caso in cui la stringa s è "ciao a tutti quanti" e k=3 mi stampa solo "t"...quando invece dovrebbe stamparmi "tutti" cioè l'intera parola...sicuramente sbaglio qualcosa o con i puntatori o con la dichiarazione delle stringhe, non sono tanto il mio forte xD infatti sto cercando di esercitarmi il più possibile...confido nelle vostre risposte...illuminatemi
Scrivere una funzione, char *strw(char *s, int k, char *w), che copia la k-esima parola contenuta nella stringa s in w, come stringa, e ritorna il puntatore w. Se s contiene meno di k parole, allora la funzione ritorna NULL (NULL è una costante in stdlib.h che rappresenta un indirizzo non valido).
Ora...io avevo pensato di contare le parole della stringa S per effettuare i vari controlli con la funzione conta(), e poi "esplorare la stringa, e alla k-esima parola iniziare a copiare i caratteri di questa parola nell'altra stringa fino allo spazio successivo quindi fine parola...ho tirato giu questo codice:
#include<stdio.h> #include<stdlib.h> #include<string.h> char *strw(char *s,int k,char *w); int conta(char *s); int main(void){ char *string1="ciao a tutti quanti"; char string2[10]; int k=3; char *ptr; ptr=strw(string1,k,string2); int i; printf("%c\n", *ptr); return 0; } // Conto il numero di parole che contiene la stringa 'string1' int conta(char *s){ int i=0,word=1,lung; lung=strlen(s); if(lung>0){ for(i=0;i<lung;i++){ if(s[i]==' ') word+=1; } } else return -1; return word; } char *strw(char *s,int k, char *w){ int i,j,r,lung=0,word=1; lung=strlen(s); // effettuo controlli di stringa vuota e di k maggiore a parole della stringa if(conta(s)==-1) printf("La stringa è vuota\n"); if(k>conta(s)) return NULL; //esploro la stringa for(i=0;i<lung;i++){ if(s[i]==' '){ word+=1; /*se il carattere è uno spazio incremento un contatore, e lo confronto con k, quando sono uguali inizio la copia nella stringa w*/ if(word==k){ r=0; for(j=i+1;s[j]!=' ';j++){ w[r]=s[j]; r++; } } } } return w; }
il programma dovrebbe ritornare un puntatore alla stringa W...visto che w è un vettore di caratteri e quindi punta al suo primo elemento faccio "return w"...quando mando la stampa dal main del contenuto del puntatore, nel caso in cui la stringa s è "ciao a tutti quanti" e k=3 mi stampa solo "t"...quando invece dovrebbe stamparmi "tutti" cioè l'intera parola...sicuramente sbaglio qualcosa o con i puntatori o con la dichiarazione delle stringhe, non sono tanto il mio forte xD infatti sto cercando di esercitarmi il più possibile...confido nelle vostre risposte...illuminatemi
Ultima modifica effettuata da crack001 18/01/11 16:26
aaa