【问题标题】:How can I multiply a string in the C language? [duplicate]如何在 C 语言中将字符串相乘? [复制]
【发布时间】:2016-01-08 12:30:19
【问题描述】:

我想将字符串“乘以”用户输入的 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
       ##
      ###
     ####
    #####
   ######

应该输出。

【问题讨论】:

  • 你不能一个字符串。期间。
  • 我不清楚:乘以字符串是什么意思? # 的 ASCII 码?或者您希望 # 成为替代值? (然后使用一个函数)
  • 你是如何在C 中得到string 的?
  • @Minato 我假设他使用的是this library,其中包含typedef
  • 你能告诉我们在你“乘”它之后应该如何看待这个字符串

标签: c cs50


【解决方案1】:

所以您需要 2 个循环来执行此操作。一种用于遍历要在一行上打印的字符,一种用于遍历整个高度(行数)。

所以我们要做的是:

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

例如

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

这将是一个左调整的树。我将由您自行调整,即在“#”前面打印空格,或者从打印 2 个 # 而不是 1 开始。

【讨论】:

    【解决方案2】:

    你不乘一个字符串,你只是使用一个循环并重复输出字符。

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

    【讨论】:

      【解决方案3】:

      虽然 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

      【讨论】:

      • 这将出现段错误,概率约为 1-1E-6。
      猜你喜欢
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多