用c语言写一个代码从键盘输入一个字符串(字符串长度不超过80旦非空),按由长到短、从左到右的顺序输出该字符串的所有子串,一个子串占一行。
时间: 2024-09-19 19:12:38 浏览: 53
在 C 语言中,我们可以使用嵌套循环来实现这个功能。这里是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 80
void print_substrings(char str[]) {
int length = strlen(str);
for (int i = 0; i < length; i++) {
for (int j = i + 1; j <= length; j++) {
printf("%.*s\n", j - i, &str[i]);
}
}
}
int main() {
char input[MAX_LENGTH];
printf("请输入一个不超过80个字符的非空字符串: ");
fgets(input, sizeof(input), stdin); // 注意 fgets 可能会多读取一个换行符,需要额外处理
input[strcspn(input, "\n")] = '\0'; // 移除换行符
if (!input[0]) {
printf("输入错误,字符串不能为空。\n");
return 1;
}
print_substrings(input);
return 0;
}
```
这段代码首先定义了一个 `print_substrings` 函数,它接受一个字符串作为输入,并通过两个嵌套的 `for` 循环遍历所有可能的子串。然后在 `main` 函数中获取用户输入的字符串,移除换行符并检查是否为空。如果输入有效,就调用 `print_substrings` 函数。
注意:由于 `fgets` 会在输入字符串末尾自动添加一个换行符(`\n`),所以在打印子串之前需要将其去除。
阅读全文