-3

尝试输出已分配给数组的字符串,每行有不同的字符,最终创建一个直角三角形。但我完全被困住了。我相信应该涉及一些 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

任何指导将不胜感激。

4

2 回答 2

1

您可以只使用一个 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-09-08T18:15:02.197 回答
0

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

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

于 2021-09-08T17:23:35.293 回答