Ajouter de l’espace à une chaîne

J’essaie d’append un espace à chaque espace jusqu’à column = 0 . Je ne sais pas comment faire cela.

Le problème est le suivant. Si vous regardez un journal, vous verrez que l’écriture est justifiée pour tenir dans les colonnes. Ecrivez un programme qui lit la largeur des colonnes d’un journal, puis une ligne de texte. Justifiez la ligne de texte pour qu’elle tienne dans une colonne de cette largeur. Lorsque votre programme est en cours d’exécution, l’écran devrait ressembler à ceci:

 Enter the width of the column: 40 Enter a line of text: Good morning how are you? 12345678901234567890123456789012345678901234567890... Good morning how are you? 

La justification est faite en comptant le nombre de lacunes dans le texte. Dans l’exemple ci-dessus, il y a 4 lacunes. Ensuite, chaque espace doit être complété par des espaces. Le nombre d’espaces supplémentaires doit être réparti aussi uniformément que possible. Dans l’exemple ci-dessus, les trois premiers espaces ont chacun 5 espaces et le dernier espace compte 4 espaces.

Remarques:

  1. Si le texte est plus long que la colonne, vous devez signaler une erreur – n’essayez pas de la diviser en deux lignes!
  2. Supposons que le texte contienne plus d’un mot.
  3. Notez la ligne d’en-tête composée de 123456789012345678 …. ceci est utile pour vérifier votre résultat. Vous pouvez créer cette ligne d’entête aussi longtemps que vous le souhaitez – une longueur utile de 70 espaces.

Merci

 #include  int clear_input_buffer(void); int column; int c; int g; int e; int space; int length; char line[40]; int main(){ g = 0; printf("enter width of column\n"); scanf("%d", &column); printf("enter line of text\n"); clear_input_buffer(); gets(line); c = 0; while(c <= column){ if(g  0)) { add space to here column = column - 1; } } printf("%d\n", space); printf("%d", length); printf("%s", line); } int clear_input_buffer(void) { int ch; while (((ch = getchar()) != EOF) && (ch != '\n')) /* void */; return ch; } 

C’est ce que j’ai fait. C’est loin d’être idéal, mais vous comprenez le point. Vous devez simplement définir des conditions, par exemple lorsque la chaîne entrée est supérieure ou égale à 40 caractères, pour ignorer la procédure.

 #include #include #include int main(void) { int i = 0; // first just initialiaze stuff char ch[40]; // memset the arrays, get the ssortingng memset(ch, '\0', 40); gets(ch); int diff = 40 - strlen(ch); int spaces = 0; while(i 
 #include  #include  #include  #define WIDTH 70 #define _(x) #x #define str(x) _(x) void ruler_print(int n){ char ruler[] = "1234567890"; while(n>9){ printf(ruler); n -= 10; } ruler[n] = '\0'; printf("%s\n", ruler); } int count_word(const char *text, size_t *count_char){ int i; char *wk, *p; p=wk=strdup(text); *count_char=0; for(i=0;p=strtok(p, " ");++i,p=NULL){ *count_char+=strlen(p); } free(wk); return i; } int main(void){ int column, len, word_count; int i, spaces, between, remain; size_t count_char; char text[WIDTH + 1]; char *p = text; printf("Enter the width of the column: ");scanf("%d%*c", &column); printf("Enter a line of text: ");scanf("%" str(WIDTH) "[^\n]", text); len=strlen(text); if(len > column || len > WIDTH){ fprintf(stderr, "too long text!\n"); return -1; } ruler_print(WIDTH); word_count = count_word(text, &count_char); spaces = column - count_char; between = spaces / (word_count -1); remain = spaces - (word_count -1)*between; strtok(text, " "); for(i=0;i