【问题标题】:Output a string with a new character in each line, forming a right triangle输出一个字符串,每行一个新字符,形成一个直角三角形
【发布时间】:2021-11-05 11:17:57
【问题描述】:

试图输出一个分配给数组的字符串,每行有不同的字符,最终创建一个直角三角形。但我完全被困住了。我相信应该涉及一些 for 循环来迭代每个字符,但我不知道如何增加每个新行上的数组索引以输出比前一行多一个字符。

这是一个让我可以形象化的草图:

string[0]
string[1] + string[2]
string[3] + string[4] + string[5]
string[6] + string[7] + string[8] + string[9]

例如,让我们考虑这行代码:char string[50] = "Assignment";

所需的输出如下所示:

A
s s
i g n 
m e n t

任何指导将不胜感激。

【问题讨论】:

  • 想想你想要制作的图案。它以一个字符开始,然后转到下一行并打印接下来的两个字符;下一行并打印 三个 个字符...1、2、3。如何生成数字 1、2、3 等,并为每个数字从字符串中打印那么多字符?从它开始,并在它之上构建
  • 首先创建一个只打印* 的程序来制作金字塔。然后创建一个 new 程序,该程序每行打印一个字符。然后创建一个最终程序,它可以满足您的任务要求。

标签: c loops char c-strings triangle


【解决方案1】:

此函数将打印三角形。如果字符串有足够的字符来打印整个最后一行,它将打印-

void printTriangle(const char *s)
{
    size_t length = strlen(s), pos = 0;
    for(size_t line = 1; line < -1; line++)
    {
        for(size_t ch = 1; ch <= line; ch++)
        {
            if(pos < length) printf("%c", *s++);
            else printf("-");
            pos++;
        }
        printf("\n");
        if(pos >= length) break;
    }
}


int main(void)
{
    printTriangle("Assignment123");
}

https://godbolt.org/z/xxM1eEY6a

【讨论】:

    【解决方案2】:

    你可以只使用一个while循环来做到这一点。

    这是一个演示程序

    #include <stdio.h>
    
    void triangle_output( const char *s )
    {
        size_t n = 1;
        size_t i = n;
        
        while ( *s )
        {
            if ( i-- == 0 )
            {
                putchar( '\n' );
                i = n++;
            }
            putchar( *s++ );
            putchar( ' ' );
        }
        
        if ( i != n - 1 ) putchar( '\n' );
    }
    
    int main(void) 
    {
        char *s = "Assignment";
        
        triangle_output( s );
        
        return 0;
    }
    

    程序输出是

    A 
    s s 
    i g n 
    m e n t 
    

    或者函数可以改写如下方式

    void triangle_output( const char *s )
    {
        size_t n = 1;
        size_t i = 0;
        
        while ( *s )
        {
            putchar( *s++ );
            putchar( ' ' );
    
            if ( ++i == n )
            {
                putchar( '\n' );
                i = 0;
                ++n;
            }
        }
        
        if ( i != 0 ) putchar( '\n' );
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      相关资源
      最近更新 更多