题目描述 凡是包含有happy作为子串的字符串都被称为快乐的字符串(happy必须连续),给你若干个字符串,你能把所有快乐的字符串都找出来么? 输入要求 第一行输入一个正整数n表示有n个字符串。 接下来输入n行,每行表示一个字符串。(n<=100,每个字符串不超过100) 输出要求 输出所有快乐的字符串,每行一个,按字典序排序。 输入样例 6 sdffhappysdfds asdfhapfsdpy dfdhappy rdfgf fdsfssd happy 输出样例 dfdhappy happy sdffhappysdfds。C语言
时间: 2024-03-08 11:47:27 浏览: 221
C++实现将一个字符串中的字符替换成另一个字符串的方法
5星 · 资源好评率100%
以下是 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 ", 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];
int i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", str[i]);
}
// 对字符串进行排序
qsort(str, n, sizeof(str[0]), cmp);
for (i = 0; i < n; i++) {
find_happy(str[i]); // 查找快乐的字符串并打印
}
return 0;
}
```
输入示例:
```
6
sdffhappysdfds
asdfhapfsdpy
dfdhappy
rdfgf
fdsfssd
happy
```
输出示例:
```
dfdhappy happy sdffhappysdfds
```
阅读全文