在多个字符之间分割%的值

时间:2015-09-30 08:27:16

标签: c

我已经获得了一个任务问题,到目前为止我已经成功解决了这个问题,除了在几个(输入确定的)字符之间分割剩余值之外。 任何帮助将不胜感激。 作为参考,我的任务问题是:

"如果你看一份报纸,你会看到写作是合理的,以适应列。编写一个程序,读取报纸中列的宽度,然后读取一行文本。将文本行对齐以适合该宽度的列。程序运行时,屏幕应如下所示:

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

通过计算文本中的空白数量来完成辩护。在上面的例子中,有4个空白。然后每个间隙必须添加空格。必须尽可能均匀地分享额外空格的数量。在上面的例子中,前三个间隙各有5个空格,最后一个间隙有4个空格。

注意:

  1. 如果文字长于列,则必须报告错误 - 请勿尝试将其分为两行!
  2. 假设文本中包含多个单词。
  3. 请注意标题行包含123456789012345678 ....这对检查结果很有用。   只要你愿意,你就可以制作这个标题行--70个空格将是一个有用的长度。
  4. "

    到目前为止,我的代码是:

    int main() {
        //input column width
        printf("Enter the width of the column: ");
        int column;
        scanf("%d", &column);
    
        //input text line
        printf("Enter a line of text: ");
        char string[80];
        getchar();
        gets(string);
    
        //print 1234567890 column header
        int y = 1,x = 0;
        while(x < column){
            if(y > 9){
                y = 0;
            }
            printf("%d", y);
            y++;
            x++;
        }
        printf("\n");
    
        //count spaces
        int i = 0;
        int space_count = 0;
        while(string[i] != '\0'){
            if(string[i] == 0x20){
                space_count++;
            }
            //printf("%c", string[i]);
            i++;
        }
    
        //work out variables
        int string_length = i;
        int remainder_space = (column - string_length);
        int space_power = (remainder_space / space_count);
        //int oddremainder = (space_count % remainder_space) ;
        //space_power = (space_power + oddremainder);
        //if
        //remainder %
    
        //insert column width check
        if(string_length > column)
        {
            printf("Text is too long. Shouldn't be more than %dcharacters\n",
                column);
            return 1;
        }
        //output
        i = 0;
        while(string[i] != '\0'){
            if(string[i] == 0x20){
                for(x = 0; x < space_power; x++){
                    printf("%c", 0x20);
                }
            }
            printf("%c", string[i]);
            i++;
        }
    

    对不起,如果这不是提问的适当方式,我的大脑就会被炸掉,我无法理解这一点。 任何指示或在正确方向上的讨论将不胜感激。

1 个答案:

答案 0 :(得分:0)

让我们看看这个例子。它有19个空间可以填充4个空隙。如果您的代码运行如此,space_power的值将为4(int(19/4)),最后会留下3个空格。你需要跟踪19%4,即。 3个额外的空间。

因此,保持计数,最初等于3.然后,当此计数大于0时,打印一个额外的空格以及所有space_power个空格。每次打印单词时减少计数。

您的代码将是这样的:

count = remainder_space % space_count;

和输出块:

i = 0;
while(string[i] != '\0'){
    int k = count > 0 ? 1 : 0;
    if(string[i] == 0x20){
        for(x = 0; x < space_power + k; x++){
            printf("%c", 0x20);
        }
        count--;
    }
    printf("%c", string[i]);
    i++;
}