2017-10-20 29 views
-4

La fonction char *my(char *s, int n) prend une chaîne s et décale les caractères de s par n endroits, entraînant l'enroulement des caractères autour de la chaîne.Comment utiliser le pointeur pour diviser la chaîne en deux chaînes? Langage C

Par exemple, étant donné la chaîne "This is my Apple!" , Un changement de n = 2 se traduira par

  • String1: "Th"
  • String2: "est mon Apple!"

si n < 0 il sera décalé dans le sens négatif.

+0

Vous pouvez utiliser 'strstr()', si la sous-chaîne est trouvée, elle sera retournée. –

+0

Utilisez [memcpy] (http://en.cppreference.com/w/c/string/byte/memcpy)? – BLUEPIXY

+0

Pour autant que je sache, la fonction que vous décrivez n'existe pas dans les bibliothèques habituelles. La spécification se lit cependant comme si vous pouviez l'utiliser pour répondre à la question dans le titre. – Yunnosch

Répondre

1

Vous pouvez simplement utiliser printf pour diviser une chaîne. Si vous voulez le résultat dans un char *, vous devez allouer de la mémoire et utiliser sprintf à la place.

Voici un exemple utilisant sprintf et l'allocation de mémoire pour retourner un char *.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

char *shift(char *string, int n) 
{ 
    int len = strlen(string); 
    char *shiftedString = malloc(len + 1); 

    n %= len; // in case you shift over string length 
    if (n < 0) n += len; // backward shift 
    sprintf(shiftedString, "%s%*.*s", string + n, n, n, string); 
    return shiftedString; 
} 

int main() 
{ 
    char *result = shift("This is my Apple!", 2); 
    printf("shifted string : %s\n", result); 
    free(result); 
    return 0; 
} 
+0

comment utiliser return, au lieu d'utiliser printf – bob90937

+0

J'ai modifié la fonction pour retourner un 'char *' au lieu d'imprimer le résultat. –

1

la chaîne est en fait un char-array char [] vous pouvez utiliser la fonction strlen en combinaison avec une boucle for comme ça.

Vous pouvez le mettre dans une fonction créant ainsi votre propre fonction qui déplacerait des lettres sur l'entrée en fonction N.

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char string[] = "This is my Apple!"; 
    //Initialize "n" before initializing the string variables. 
    int n = 2; 
    int len = strlen(string); 
    char string1[n]; 
    char string2[len - n]; 

    for(int i = 0;i<len;i++){ 
     if(i<n){ 
      string1[i]=string[i]; 
     }else{ 
      string2[i-n]=string[i]; 
     } 
    } 
    printf("string = %s\n",string); 
    printf("string1 = %s\n",string1); 
    printf("string2 = %s\n",string2); 

    return 0; 
} 
+1

1) Mettez '#include ' pour 'strlen'. 2) 'char chaine1 [n];' -> 'charchaîne1 [n + 1];': +1 pour la terminaison nulle. – BLUEPIXY

+0

char string1 [n]; Erreur: doit avoir la valeur constante – bob90937

+0

il y aurait une erreur si vous initialisez "char string1 [n]" avant d'initialiser "int n = 2", mais si vous regardez attentivement mon code, vous remarquerez que ce n'est pas le cas . –