Add space to a string

后端 未结 2 1401
误落风尘
误落风尘 2021-01-21 04:41

I am trying to add a space to each space until column = 0. I am not sure how to do this.

The problem is the following. If you look at a newspaper you will s

相关标签:
2条回答
  • 2021-01-21 04:59
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #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<word_count-1;++i){
            printf("%s%*s", p, between + (remain ? 1 : 0), " ");
            if(remain) --remain;
            p=strtok(NULL, " ");
        }
        printf("%s\n", p);
        return 0;
    }
    
    0 讨论(0)
  • 2021-01-21 05:01

    This is what i made. It's far from ideal, but you get the point. You just need to put in conditions, like when the string entered is larger or equal than 40 chars, to skip the procedure.

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    int main(void)
    {
    int i = 0;  // first just initialiaze stuff
    char ch[40]; // memset the arrays, get the string
    memset(ch, '\0', 40);
    gets(ch);
    
    int diff = 40 - strlen(ch);
    int spaces = 0;
    while(i<strlen(ch))
    {
        if(*(ch + i++) == ' ')  // count the number of words/spaces between words
        spaces++;
    }
    char finalt[40];
    memset(finalt, '\0', 40);
    
    i = 0;
    
    diff /= spaces;  // diff is the number of spaces to be added between every word
    
    i = 0;
    int j = 0;  // j is for the finalt array
    int k = 0;  // k  counts through the while, to put in spaces
    printf("%d\n", diff);
    while(i<40)    // just squeeze in the spaces
    {
        if(ch[i] == ' ') {while(k<diff){ finalt[j++] = ' '; k++;} k = 0;}
        else {finalt[j] = ch[i]; j++;}
        i++;
    }
    
    printf("%s\n", finalt); // print the result
    return 0;
    }
    
    0 讨论(0)
提交回复
热议问题