【问题标题】:Spliting the value of a % between multiple characters在多个字符之间拆分 % 的值
【发布时间】:2015-09-30 08:27:15
【问题描述】:

我收到了一个分配问题,到目前为止我已经设法解决了所有问题,除了在几个(输入确定的)字符之间拆分余数。 任何帮助将不胜感激。 作为参考,我的作业问题是:

“如果你看一份报纸,你会发现文字被对齐以适合列。编写一个程序,读取报纸中列的宽度,然后读取一行文本。对齐文本行以适应该宽度的列。当您的程序运行时,屏幕应如下所示:

输入列宽:40 输入一行文字:早上好,你好吗? 12345678901234567890123456789012345678901234567890... 早上好你好吗?

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

注意事项:

  1. 如果文本比列长,则必须报告错误 - 不要尝试将其分成两行!
  2. 假设文本中包含多个单词。
  3. 注意由 123456789012345678.... 组成的标题行,这对于检查结果很有用。 您可以随意设置此标题行 - 70 个空格将是一个有用的长度。

"

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

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++;
    }

很抱歉,如果这不是恰当的提问方式,我的大脑已经炸了,我无法理解这个问题。 任何正确方向的指示或讨论将不胜感激。

【问题讨论】:

  • 说来话长,但似乎缺少一个具体问题。 (对于它的价值,乍一看你似乎在按照要求做。)
  • 要求中有一个谎言:'每个间隙必须有空格'。绝对不是!如果输入行适合给定的列宽,或者短了一个,那么没有间隙或最多需要添加一个空格。
  • 此外,输入行中没有关于空格的假设——因此可能是连续的空格,例如Hello,___my____little_kitty(空格替换为下划线以规避默认的 HTML 渲染器空间压缩)。那么应该将添加的空格均匀分布到输入字符串中,还是将所有空格分布到结果输出字符串中?
  • 如果输入行以空格开头或结尾会发生什么?他们应该被保留吗?行的头部或尾部的空白是否应该扩展到公共宽度(等于内部间隙)...?

标签: c


【解决方案1】:

让我们看看这个例子。它有 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++;
}

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2023-04-09
    • 2018-01-23
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多