Mi fai un'esempio anzichè darmi il prototipo con i parametri formali (che non mi aiutano di solito a capire)?
al posto di stampare a video memorizza quello che vuoi scrivere in un array
Ah...e l'array lo devo dichiarare prima e dev'essere del tipo appropriato, giusto? Cmq utile...nell'ultima prova di laboratorio che ho fatto la parte facoltativa (che non ho avuto tempo di fare) dovevo concatenare 10 stringhe in una sola stringa gigante. A casa ho provato ma l'ho fatto solo utilizzando un file.
Dici che sprintf avrebbe funzionato? Ti posto il programma:
Codice:#include <stdio.h> #include <string.h> #define M 100 #define N 10 #define BIG 1000 typedef char str100[M]; typedef char str1000[BIG]; int findMinS(str100 v[], int l, int s){ int i, pos; str100 min; strcpy(min, v[s]); pos=s; for(i=s; i<l; i++){ if(strcmp(v[i], min)==-1){ strcpy(min, v[i]); pos=i; } } return pos; } void selSort(str100 v[], int l){ int i, min; str100 t; for(i=0; i<l-1; i++){ min=findMinS(v, l, i); strcpy(t, v[i]); strcpy(v[i], v[min]); strcpy(v[min], t); } return; } int main(){ str100 vect[N]; int i; for(i=0; i<N; i++){ printf("Inserisci la stringa %d: ",i); scanf("%s",&vect[i]); } printf("\n"); selSort(vect, N); for(i=0; i<N; i++) printf("%s \n",vect[i]); printf("\n"); str1000 all; FILE *concatena; concatena=fopen("Concatena.txt", "w"); for(i=0; i<N-1; i++) fprintf(concatena, "%s#", vect[i]); fprintf(concatena, "%s", vect[N-1]); fclose(concatena); concatena=fopen("Concatena.txt", "r+"); fscanf(concatena, "%s", all); fclose(concatena); printf("%s",all); return 0; }
ma... sinceramente in quel caso avrei usato una più semplice strcat(string1,string2) che attacca string2 alla fine di string1.
ti crei un'altra stringa dove ci metti # e ad ogni passaggio del ciclo concateni lei seguita da quella che ti interessa
mi sorge un dubbio: non mi ricordo se si può usare strcat tra una stringa e un singolo carattere, perchè alla fine quello che devi fare non è una stringa contenente #, ma una singola variabile char contenente '#'.
cmq le stringhe sono array di char, quindi le inizializzi con
più semplicemente io avrei fattoCodice:char all[DIM];
Codice:strcat(all,vect[0]); for(i=1;i<N;i++) { strcat(all,variabileCheContiene#); strcat(all,vect[i]); }
Io l'ho fatto con iostream, modificalo con stdio tu
cmq nel programma che hai scritto prima, cosa servono le funzioni che hai messo?Codice:#include <iostream.h> #include <string.h> #include <stdio.h> #define MAX 100 #define BIG 1000 void main() { char all[BIG]="",string1[MAX],string2[MAX],sharp[2]="#"; cout<<"Inserisci una stringa: "; gets(string1); cout<<"Inseriscine un'altra: "; gets(string2); strcat(all,string1); strcat(all,sharp); strcat(all,string2); cout<<endl<<endl<<endl<<all; }
Ultima modifica di janky; 8-12-2004 alle 12:04:54
Codice:strcat(all, "#");
man is your friend
Quelle due funzioni servono per trovare il minimo nel vettore di stringhe (in questo caso, la stringa che viene prima delle altre in ordine alfabetico, visto che usiamo strcmp) e per scambiare il minimo con l'elemento i del vettore. Alla fine del ciclo gli elementi del vettore sono ordinati in ordine crescente. Praticamente usiamo la selSort unita alla findMinS per realizzare il metodo detto di Bubble-Sorting per ordinare degli insiemi finiti di elementi (vettori nel nostro caso).janky
Nooooo ho pure tentato strcat(all, '#'); ma gli apici trasformano # nel suo corrispondente valore ascii...Codice:strcat(all, "#");
Cmq non va:
Mi da un output stranissimo, tipo ogni stringa ripetuta 2 volte immersa in un mare di Z (esempio: ZZZZZZa#aZZZZZZZpluto#plutoZZZZZ ecc)...ci rinuncio e aspetto la soluzione che mette il prof online ._.Codice:str1000 all; for(i=0; i<N-1; i++){ strcat(all, vect[i]); strcat(all, "#"); } strcat(all, vect[N-1]);
E' corretto.Codice:strcat(all, "#");
Sei sicuro che le stringhe siano ASCIIZ (cioe' che terminano con uno 0)?
Perche' altrimenti strcat non funziona, e potrebbe dare risultati simili a quelli da te indicati (lo 0 e' il terminatore di fine stringa. Se non lo trova, continua a leggere oltre la fine della stringa finche' non incontra casualmente uno 0).
Un altra possibilita' e' che tu abbia provocato un buffer overflow, cioe' non hai dimensionato adeguatamente gli array di char e sei andato a sovrascrivere lo 0 finale, con i risultati sopra descritti.
N.B.
0 <- zero
man is your friend
le stringhe terminano con \0 non con 0 soltanto.3y34|v|31337
cmq come avevo già detto prima avevo il dubbio che strcat(all, "#"); non funzionasse, invece funziona. Drizzt stai sbagliando qualcosa...