如何在C语言中乘以字符串?

时间:2016-01-08 12:30:20

标签: c cs50

我希望将字符串“乘以”用户输入的int变量。

#include <cs50.h>
#include <stdio.h>

    // Height < 24

    string block = "#";
    string output;

    int main(void) {
        printf("Height: ");
        int height = GetInt();
        while (true) { 
            if (height < 24 && height > 0) {
                output = "#" + block * height;
                printf("%s\n", output); 
                break;

            } else {
                printf("Height: ");
                height = GetInt();
            }
        }
        return 0;
    }

使用Height变量,我希望将字符串变量block (#)乘以Height,并将其添加到另一个"#"

我尝试以唯一的方式实现它,我认为它有意义然而它看起来似乎不正确。

我在这个主题上查看了StackOverflow,并且只考虑到这个问题,只能找到C#和C ++主题。

编辑:打印后输出应如下所示:

       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########

输出的“#”行取决于用户输入的高度变量。假设用户输入高度“5”:

Height: 5
       ##
      ###
     ####
    #####
   ######

应输出。

3 个答案:

答案 0 :(得分:1)

您不会将字符串相乘,只需使用循环并重复输出字符。

int j;
for (j = 0; j < (1 + height); ++j) {
    printf ("#");  /* Or putchar('#') */
}
printf ("\n");

答案 1 :(得分:1)

所以你需要2个循环才能做到这一点。一个用于遍历要在一条线上打印的字符,一个用于遍历整个高度(行数)。

所以我们想做的是:

  • 从1到(包括高度)遍历每一行。
  • 对于每一行,输出与当前行号
  • 一样多的#&#39

e.g。

 int lineno;
 int height  = GetInt();
 ... 
 for (lineno = 1; lineno <= height; lineno++) {
      int column;
      for (column = 0; column < lineno; column++) {
           putchar('#');
      }
     putchar('\n');
 }

这将是一个左调整的树。我会把它留给你来正确调整它,即打印#&#39;前面的空格,或者先打印2#而不是1。

答案 2 :(得分:0)

虽然C ++不是Python,但您可以尝试使用字符串连接来模拟字符串乘法的函数,如下所示:

string strmltply (string s, int multiplier) {
    string res;

    strcpy(res, s);

    // concatenate s (multiplier - 1) times
    for (int i = 1; i < multiplier; ++i) {
        strcat(res, s);
    }

    return res;
}

然后在程序中multiplier的循环中使用它,每次迭代打印所需字符串(在您的情况下为#),然后添加换行符\n