凡是包含有happy作为子串的字符串都被称为快乐的字符串(happy必须连续),给你若干个字符串,你能把所有快乐的字符串都找出来么? 输入要求 第一行输入一个正整数n表示有n个字符串。 接下来输入n行,每行表示一个字符串。(n<=100,每个字符串不超过100) 输出要求 输出所有快乐的字符串,每行一个,按字典序排序。c语言
时间: 2024-03-08 18:47:22 浏览: 89
以下是 C 语言的代码实现,使用了字符串的匹配和排序:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_N 100
#define MAX_LEN 101
// 判断子串是否为快乐的字符串
int is_happy(char *str, int start, int end) {
char *happy = "happy";
int i, j;
for (i = start, j = 0; i < end && j < 5; i++, j++) {
if (str[i] != happy[j]) {
return 0;
}
}
return j == 5;
}
// 查找快乐的字符串
void find_happy(char *str) {
int len = strlen(str);
int i, j;
for (i = 0; i < len; i++) {
for (j = i + 5; j <= len; j++) {
if (is_happy(str, i, j)) {
printf("%.*s\n", j - i, str + i); // 打印子串
}
}
}
}
// 字符串比较函数
int cmp(const void *a, const void *b) {
return strcmp(*(char **)a, *(char **)b);
}
int main() {
int n;
char str[MAX_N][MAX_LEN];
char *ptrs[MAX_N];
int i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", str[i]);
ptrs[i] = str[i];
}
// 对字符串进行排序
qsort(ptrs, n, sizeof(char *), cmp);
for (i = 0; i < n; i++) {
find_happy(ptrs[i]); // 查找快乐的字符串并打印
}
return 0;
}
```
输入示例:
```
3
happynewyear
happyhappy
newyear
```
输出示例:
```
happy
happyhappy
happynew
newyear
year
```
阅读全文