2017-01-20 1 views
0

si j'aiCopier chaîne à partir index spécifique dynamique en C

char str_cp[50],str[50], str_other[50], str_type[50]; 
strcpy(str,"how are you : i am fine"); 
strcpy(str_other, "who are you : may be robot or human being"); 
strcpy(str_type,"type : worker/manager "); 

donc comment coder ... pour copier une chaîne de « : » à la fin de la ligne? quand je ne suis pas connu avec l'index de fin.

+1

Un bon début pourrait être de [trouver le caractère de séparation] (http://en.cppreference.com/w/c/string/byte/strchr). –

+0

Que voulez-vous dire par "l'indice final"? Vous ne copiez pas tout le chemin jusqu'à la fin de la chaîne? – dasblinkenlight

+0

end index mean ... le dernier caractère de la ligne. –

Répondre

2

En C, la copie d'un caractère spécifique, à la fin de la chaîne, peut être accompli avec strcpy, en supposant que vous avez tampon qui est suffisamment grand. Tout ce que vous devez faire est de passer le pointeur sur le caractère initial que vous voulez garder.

Le pointeur peut être trouvé avec strchr, comme ceci:

const char *tail = strchr(str, ':') + 1; // skip ':' itself. Add 2 to skip ' ' too 

Si vous imprimez tail, vous obtiendrez le contenu du reste de la chaîne:

printf("%s\n", tail); 

Si vous avez besoin copier, le faire avec strcpy:

size_t len = strlen(tail)+1; 
char *copy = malloc(len); 
strcpy(copy, tail); 
2

Faire un tableau différent de la taille 50, puis il suffit de copier

char source[150]; // supoose your sorce array 
char dest[150]; // suppose your destination 
int i =0,Flag =0,j=0; 

for(char c = source[i];c != '\0';i++) 
{ if(c == ':') 
     Flag = 1; // coz we have to start copying from here 

    if(Flag == 1) 
     dest[j++]=c; //copying the elements 
    } 
+1

Peut-on le modifier pour omettre Flag, comme si (c == ':' || strlen (dest)> 0) {dest [j ++] = c; } –

+0

oui cela peut fonctionner mais les performances diminueront @vijaymishra upvote si vous trouvez cela utile merci –

+0

Bcoz Celui-là est court et sans boucle. Je vote même toi. Merci –

0
typedef struct string String; //do we suppose you wrote a string buffer 
// to avoid mallloc and reallock 
char * d_prs(String * buf; char * to_parse) 
{ 
    reset_st(buf);// do you suppose you have a macro to reset the buffer 
    while(*to_parse) 
     if(*to_parse++==':') break; 
    if(!*to_parse)return NULL; //if null the str, does not contain ':' 
    concat_s(buf,to_parse); //the pointer is right initalized...justcpy 
    return str_toCstring(buf);//a macro to get the data of the buffer  

}