C语言中如何将字符串相乘?
How can I multiply a string in the C language?
我想通过用户输入的 int
变量 "multiply" 一个字符串。
#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
,并将其添加到另一个 "#"
。
我尝试以我认为有意义的唯一方式实现它,但语法似乎不正确。
我查看了关于这个主题的 Whosebug,但只能找到考虑到这个问题的 C# 和 C++ 主题。
编辑:打印后输出应如下所示:
##
###
####
#####
######
#######
########
#########
而输出的“#”行取决于用户输入的高度变量。假设用户输入高度“5”:
Height: 5
##
###
####
#####
######
应该输出。
你不需要乘以一个字符串,你只需使用一个循环并重复输出这个字符。
int j;
for (j = 0; j < (1 + height); ++j) {
printf ("#"); /* Or putchar('#') */
}
printf ("\n");
虽然 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
.
所以你需要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 开始。
我想通过用户输入的 int
变量 "multiply" 一个字符串。
#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
,并将其添加到另一个 "#"
。
我尝试以我认为有意义的唯一方式实现它,但语法似乎不正确。
我查看了关于这个主题的 Whosebug,但只能找到考虑到这个问题的 C# 和 C++ 主题。
编辑:打印后输出应如下所示:
##
###
####
#####
######
#######
########
#########
而输出的“#”行取决于用户输入的高度变量。假设用户输入高度“5”:
Height: 5
##
###
####
#####
######
应该输出。
你不需要乘以一个字符串,你只需使用一个循环并重复输出这个字符。
int j;
for (j = 0; j < (1 + height); ++j) {
printf ("#"); /* Or putchar('#') */
}
printf ("\n");
虽然 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
.
所以你需要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 开始。