Newsgroup: it.comp.lang.c
Titolo: Inserire una sottostringa in una stringa

Ciao ragazzi, ho un problema con il C. Devo inserire una sottostringa("pippo") in una stringa letta dall'input, una ogni parola.
Il mio abbozzo č questo (premetto che non so se č il procedimento corretto e accetto di ben grado aggiustamenti anche totali) cmq se inserisco lo spazio non mi stampa niente!.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
	char* s;
	char* f;
        printf("Inserisci una stringa: ");
	int l;
	int i=0;
	int z=0;
	while((l=getchar())!=EOF)
	{
		 s[i]=l;
		 i++;
	}
for(i=0;s[i]!='\0';i++){
if(s[i]==' '){
f[z]=' ';
f[(z+1)]='p';
f[(z+2)]='i';
f[(z+3)]='p';
f[(z+4)]='p';
f[(z+5)]='o';
f[(z+6)]=' ';
z=z+7;
}
else{
f[z]=s[i];
z++;
}
}
for(i=0;f[i]!='\0';i++)
putchar(f[i]);
return 0;
}
-- 
Nedo VI 
------------------------------------------------------------------------
View this thread: 
http://www.itsistemi.net/viewtopic-812522.html
Inviato via 
http://www.itsistemi.net

Allora ho 'risolto' così (aggiungendo '\0' alla fine e usando array) anche se l'idea di usare un array non mi piace, magari devo usare una malloc? Ho letto anche il post sostituzione in una stringa di YattaMax.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
	char s[100];
	char f[100];
        printf("Inserisci una stringa: ");
	int l;
	int i=0;
	int z=0;
	while((l=getchar())!=EOF)
	{
		 s[i]=l;
		 i++;
	}
s[i]='\0';
for(i=0;s[i]!='\0';i++){
if(s[i]==' '){
f[z]=' ';
f[(z+1)]='c';
f[(z+2)]='r';
f[(z+3)]='i';
f[(z+4)]='s';
f[(z+5)]='i';
f[(z+6)]=' ';
z=z+7;
}
else{
f[z]=s[i];
z++;
}
}
f[z]='\0';


 Ho letto anche il post sostituzione in una stringa di YattaMax.
Provato ?
subst("pippo pluto paperino ciccio paperoga", " ", " disney ")
a me restituisce:
pippo disney pluto disney paperino disney ciccio disney paperoga
A me sembra quello che volevi, oppure forse non ho capito cosa ti serve.
Ciao
	MaX

 mio abbozzo è questo (premetto che non so se è il procedimento corretto e

Ammazza che casino: ma non ti basterebbe prendere una stringa intera in
input e poi usare subst??
-- 
daniele_athome

 La funzione subst() non e` una funzione standard.
No, ma penso si riferisse al codice della funzione riportata nel messaggio :
" sostituzione in una string ", da me inviato il giorno 06/04/2006.
La quale poi, fa uso di funzioni della libreria standard.
ciao
	MaX

 " sostituzione in una string ", da me inviato il giorno 06/04/2006.
Giusto per immediatezza (anche perche' contiene una piccola correzione 
in piu') :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* subst(char* str, char* pattern, char* strToAdd)
{
    char* patternPointer;
    char* startPointer = str;
    char* newstr = (char*) malloc( sizeof(char)*1 );
    *(newstr)='\0';
    while((patternPointer = strstr(startPointer, pattern)) != NULL  )
    {
       newstr = (char*) realloc( newstr, sizeof(char) * ( strlen(newstr) 
+ ( patternPointer - startPointer ) + strlen(strToAdd) + 1 ) );
       bzero(newstr+strlen(newstr), ( patternPointer - startPointer ) + 
strlen(strToAdd) + 1 );
       strncat(newstr, startPointer, sizeof(char) * ( patternPointer - 
startPointer) );
       strcat(newstr, strToAdd);
       startPointer = (char*) (( sizeof(char) * strlen(pattern) ) + 
patternPointer);
    }
    newstr = (char*) realloc( newstr, sizeof(char) * ( strlen(newstr) + 
strlen(startPointer) + 1 ) );
    strcat(newstr, startPointer);
    return newstr;
}
int main(void)
{
    printf( "%s\n", subst("ciao /$/ come stai ? sei sempre il solito /$/ 
non cambierai mai", "/$/", "pippo") );
    return 1;
}

YattaMaX wrote:

Davvero ora che ci penso non c`è neanche la pagina di manuale.....
-- 
daniele_athome

 Davvero ora che ci penso non c`è neanche la pagina di manuale.....
Cosa intendi ?
Ciao
	MaX

YattaMaX wrote:

Che subst non e` standard ne posix ne ansi c... o sbaglio?
-- 
daniele_athome

daniele_athome ha scritto:

Si, non e' una funzione standard C, ma hai letto i miei messaggi 
precedenti ?
subst e' il nome che ho dato io ad una funzione, il quale codice e' 
presente in un post inviato il 6 Aprile, e poi oggi l'ho riproposto in 
questo thread.
La funzione da me proposta, e' una funzione personale, che non e' 
presente nelle librerie standard, ma che al suo interno fa uso solo di 
funzioni standard.
Ciao
	MaX
PS:
Non so se subst faccia parte di un qualche set di librerie esterne, il 
nome che gli ho dato e' puramente stato dato a sentimeno :)

YattaMaX wrote:

Si in effetti il tuo post l'ho letto dopo aver postato... :)
-- 
daniele_athome