在C中制作金字塔

我必须使用C,而不是C ++制作金字塔。 我要做的就是这个,我有一个字符串“这是一个字符串”(是的,空间假设在那里),我必须从两边“删除”一个字母,并打印出来。 像这样

"this is a string " "his is a string" "is a strin" "sa stri" " a str" 

重复此过程,直到没有更多字符。 我的老师说要使用子串,C中有没有说过的东西

从位置打印(索引0到索引x)
从位置打印(索引1到索引x-1)

我知道我必须使用for循环。

这是家庭作业,所以我会让你开始。

 #include  #include  int main(void) { char src[] = "this is a test string"; char dest[5] = {0}; // 4 chars + terminator for (int i = 0; i * 4 < strlen(src); i++) { strncpy(dest, src+(i*4), 4); puts(dest); } } 

输出:

 this is a te st s trin g 

因此,对于您的金字塔问题,您将需要获取原始字符串的子字符串。 将子字符串的开头设置为原始字符串前面的一个字符,将strlen(original) - 1为结束字符。 然后循环该过程。

是的,有一个打印设施,使您可以打印子串。 阅读printf的规范。

有一种方法可以给它一个参数(int)来限制它打印的另一个参数(char *)中的字符数。

要删除字符串的第一个字符,只需将下一个字符视为字符串的开头即可。 所以,而不是puts(str) ,调用puts(str + 1)

要删除字符串的最后一个字符,请使用\0字符覆盖最后一个字符。 由于这是一种破坏性操作,因此操作原始字符串的副本可能是个好主意。

要解决此问题,请复制该字符串。 保持两个指针:一个在复制的字符串的前面走向末端,一个在末端走向前面。