乘法字符串

时间:2019-03-03 14:12:51

标签: c string

我要制作一行星星,每行包含比前一行更多的星星。我的问题的关键是我不知道如何在C中将字符串相乘。

#include<stdio.h>
#include<conio.h>
main()
{    
     int max = 10
     for (int i = 1; i <= max; ++i){
         printf("*"*(2 * i - 1);
     }

}

3 个答案:

答案 0 :(得分:2)

您可以重复打印所需数量的字符串。

#include<stdio.h>
#include<conio.h>
main()
{    
     int max = 10; // a semicolon is added to make it compile
     for (int i = 1; i <= max; ++i){
         for (int j = 0; j < (2 * i - 1); j++){ // repeat (2 * i - 1) times
             printf("*");
         }
         printf("\n"); // separate lines
     }

}

我尊重原始代码,因此仍然存在一些不好的地方(毫无意义的包括非标准conio.h和非标准定义main()(而不是int main(void)))

答案 1 :(得分:2)

语言语义不支持您尝试执行的操作。在C语言中,字符串无论如何都不是一流的类型-它只是char的数组,因此所有字符串处理都是通过函数执行的;您无法对其进行直接操作;即使您不确定就是其中之一-使用非常简单的操作即可轻松实现非常有限的用例。

在这种情况下,由于您直接输出字符串,因此实际上不需要重复的字符串复制(或按您的说法乘以),因此不需要存储字符串以及随之而来的相关内存分配问题。相反,您只需要重复输出字符串即可。

#include <stdio.h> 

void printRepeatString( const char* str, int n )
{
    for( int i = 0; i < n; n++ )
    {
        printf( "%s", str ) ;
    }
}

int main( void )
{    
     const int max = 10
     for (int i = 1; i <= max; i++ )
     {
         printRepeatString( "*", (2 * i) - 1 ) ;
         putchar( '\n' ) ;
     }

    return 0 ;
}

答案 2 :(得分:0)

“乘以” '*'字符串的一种替代方法是创建最长的字符串,然后打印其中的截短部分。

使用"%.*s", n, s打印最多s个字符的字符数组n

#include<stdio.h>
#define MAX 10

int main(void) {
  char s[2 * MAX] = {0};
  memset(s, '*', 2 * MAX - 1);

  for (int i = 1; i <= MAX; ++i) {
    printf("%.*s\n", 2 * i - 1, s);
  }

}

输出

*
***
*****
*******
*********
***********
*************
***************
*****************
*******************