3 votes

Ajout d'espaces entre les mots d'une chaîne de caractères c

J'essaie d'écrire un programme pour insérer des espaces entre les mots afin de les adapter à une colonne, par exemple :

  • Vous lisez dans une ligne de texte, par ex : Good morning how are you?
  • Vous lisez dans la largeur de la colonne, par exemple : 40 .
  • Ensuite, j'ai compté combien d'espaces il y a dans ce texte (4).
  • Je dois maintenant répartir les espaces restants entre ces mots pour que la longueur du texte soit de 40.

Par exemple :

Good     morning     how     are    you?
1234567890123456789012345678901234567890

Mon problème se pose lorsque j'essaie d'insérer les espaces entre les mots, car je ne sais pas comment faire. Voici ce que j'ai jusqu'à présent.

#include <stdio.h>
#include <string.h>
char text[65], spaces[50], ch;
int i, remainder, spacesr, count, column, length, distribution;
int main(){
    i = 0;
    count = 0;
    printf("Please enter a line of text: ");
    while(ch != '\n')
    {
        ch = getchar();
        text[i]=ch;
        i++;
    }
    text[i]='\0'; 
    printf("Text: %s",text);
    printf ("Please enter the width of the column: ");
    scanf ("%d", &column);
    for (i = 0; text[i] != '\0'; i++) {
        if (text[i] == ' ') {
            count++;
        }
    }
    length = strlen(text);
    spacesr = column - length;
    distribution = spacesr / count;
    remainder = spacesr % count;
    if (length > column) {
        printf ("ERROR: Length of text exceeds column width.");
    }
}

J'ai calculé le nombre d'espaces dans le texte lu, puis j'ai calculé le nombre d'espaces restants, puis j'ai divisé ce nombre par le nombre d'espaces pour déterminer combien d'espaces je dois mettre entre chaque mot. Le reste de ces espaces sera réparti uniformément après que les espaces principaux auront été saisis.

Qu'entendez-vous par espaces principaux ?

En gros, je veux faire tenir la phrase "Bonjour, comment allez-vous ?" dans une colonne de 40 caractères de large en ajoutant des espaces entre les mots. Est-il possible de faire quelque chose comme ceci :

for (i = 0; text[i] != '\0'; i++) {
    if (text[i] == ' ') {
    then add a certain amount of spaces to it

0voto

Richard Schwartz Points 6319

Vous devez décomposer votre chaîne d'entrée en mots séparés. Jetez un coup d'oeil aux réponses à cette question précédente sur StackOverflow pour quelques techniques que vous pouvez utiliser pour cela.

Après cela, il s'agit simplement d'émettre les mots séparés avec le nombre correct d'espaces entre eux.

0voto

Rustic Points 56

Une des nombreuses façons de le faire.

Supposons que totalSpace soit la longueur du tampon dans lequel nous devons faire rentrer la chaîne. et str = la chaîne originale que nous avons.

Algo :

int extraSpace = totalSpace - strlen(str);
int numWords = findWordsInString(str);
int numSpaces = numWords - 1;
int incrementEachSpaceby = extraSpace/numSpace;

//Now linear scan of str and increase spaces by value of incrementEachSpaceby 

    char *newStr = malloc(totalspace);
    int i =0, int j = 0;
    int k;
    while (i < strlen(str) && j < totalspace)
    {
        while (str[i] != ' ') {
            newStr[j++] = str[i++];
        }

        while (str[i] == ' ')
            newStr[j++] = str[i++];

        k = incrementEachSpaceby;

        while (k) { 
            newStr[j++] = ' ';
            k--;
        }
    }

Ce n'est qu'une idée superficielle. Vous pouvez l'améliorer encore.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X