Newsgroup: it.comp.os.linux.development
Titolo: Stringhe in C

data una stringa come faccio ad estrare una sottostringa eliminando i
primi X caratteri? Lo so che è una vaccata, ma non trovo la funzione.
Inoltre come posso fare per eliminare da una stringa un determinato
carattere, ad esempio da "ciao mamma" togliere la a ed avere "cio mmm"?
-- 
Non c'è più forza nella normalità, c'è solo monotonia.

 wrote in message 3973663B...@iol.it...
| data una stringa come faccio ad estrare una sottostringa eliminando i
| primi X caratteri? Lo so che è una vaccata, ma non trovo la funzione.
char *strncpy( char *strDest, const char *strSource, size_t count );
| Inoltre come posso fare per eliminare da una stringa un determinato
| carattere, ad esempio da "ciao mamma" togliere la a ed avere "cio mmm"?
se vuoi preservare il contenuto di "ciao mamma" ti servono due stringhe:
char res[10];
char * pc_1 = "ciao mamma"
int i = 0;
int i2 = 0;
while (pc_1[i] != '\0')
    if (pc_1[i] != 'a')
        res[i2++] = pc_1[i++];

 wrote in message 3973663B...@iol.it...
| data una stringa come faccio ad estrare una sottostringa eliminando i
| primi X caratteri? Lo so che è una vaccata, ma non trovo la funzione.
char *strncpy( char *strDest, const char *strSource, size_t count );
| Inoltre come posso fare per eliminare da una stringa un determinato
| carattere, ad esempio da "ciao mamma" togliere la a ed avere "cio mmm"?
se vuoi preservare il contenuto di "ciao mamma" ti servono due stringhe:
char res[10];
char pc_1[] = "ciao mamma"


 carattere, ad esempio da "ciao mamma" togliere la a ed avere "cio mmm"?
/*
 * source:  la stringa sorgente
 * dest:    buffer di destinazione destinazione
 * c:       il carattere de sottrarre
 * destdim: la dimensione del buffer di destinazione
 *
 * NB: NON TESTATA, POTREBBE ESSERE BUGGATA
 */
void subchar(char *source, char *dest, char c, int destdim){
	while (*source && destdim > 1){
		if (*source != c){
			*(dest++) = *(source);
			destdim--;
		}
		source++;
	}
	if (destdim >= 1)
		*dest = '\0';
}
Ciao,
Fabio Alemagna

 wrote in message 8kvt2h$ov4
| char *strncpy( char *strDest, const char *strSource, size_t count );
emmmh, era il contrario:-)
char dest[size];
if (X < strlen(source))
    strcpy(dest, source + X);

 Non c'è più forza nella normalità, c'è solo monotonia.
Rispondo a corredo delle altre risposte che hai ricevuto.
Oltre a considerare la validita' dei suggerimenti degli
altri amici del gruppo, (es. uso memcpy() o strcopy())
se il valore originale della stringa non ti serve piu' puoi:
per saltare i primi X caratteri
nuovastr = vecchiastr +  N;    /* aritmetica dei puntatori */
se addirittura vuoi accorciarla di M caratteri e la
vecchiastr NON e' const
int temp;
temp strlen(nuovastr);
nuovastr[temp>m?temp-M:temp]=0; /* ma puoi usare if() per sapere */
          /* se e' stato possibile accorciare nuovastr di M char */
per compattare una stringa NON const togliendo tutte le occorrenze
di un certo char:
int compattastr(char * str, char c)
{
  int i=0;
  int j=0;
  while (str[i]!='\0')
    if (str[i]!=c) str[j++]=str[i++];
    else i++;
  str[j]='\0';
  return j; /* nuova lunghezza della stringa. */  
}
/* ATTENZIONE: DEBUG SOLO CEREBRALE!!! CONTROLLARLA MEGLIO */
ciao
roberto.

 Non c'è più forza nella normalità, c'è solo monotonia.
A Ottavio! ma che mi fai fare?
in it.comp.lang.c ti rispondero' comunque.
ciao
roberto.

carattere, ad esempio da "ciao mamma" togliere la a ed avere "cio mmm"?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
 *  rstr( char *, int )
 *
 */
 char *rstr( char *s, int n )
 {
      int len = strlen( s ) ;
      char *res = (char*)calloc( 1, len + 1 ) ;
      int i, j ;
      if ( res )
      {
         if ( (len < n) || (n < 0) )
            n = 0 ;
         for ( i = 0, j = 0 ; i < len ; i++ )
             if ( i >= n )
             {
                res[j++] = s[i] ;
             }
      }
      return res ;
 }
 /*
  *  schr( char *, char )
  *
  */
  char *schr( char *s, char c )
  {
       int len = strlen( s ) ;
       char *res = (char*)calloc( 1, len + 1 ) ;
       int i, j ;
       if ( res )
       {
          for ( i = 0, j = 0 ; i < len ; i++ )
              if ( s[i] != c )
              {
                 res[j++] = s[i] ;
              }
       }
       return res ;
  }
 int main()
 {
     puts( rstr( "andrea", 2 ) ) ;
     puts( schr( "andrea", 'a' ) ) ;
     return 0 ;
 }