使用C语言编写符合下列要求的代码:如果字符串的一个子串(其长度大于1)的各个字符串均相同,称为等值字串。设计一个算法,输入字符串S,并以“!”作为串结束标志。如果串S中不存在等值字串,则输出信息“无等值字串”,否则输出一个长度最大的等值字串。 要求:输入一个串后,能得到对应的结果 测试结果:若S=“abc123abc123!”,则输出“无等值字串”。 若S=“abceebccaddddaaadd!”,则输出“dddd”。 存储结构:串的定长顺序存储或堆存储。
时间: 2024-03-23 17:40:17 浏览: 78
以下是使用C语言编写的程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
char str[MAX_LEN]; // 存储输入的字符串
int is_equal(int start, int mid, int end) {
// 判断是否为等值子串
for (int i = start; i <= end; i++) {
if (str[i] != str[mid + i - start]) {
return 0;
}
}
return 1;
}
int main() {
printf("请输入字符串S:");
scanf("%s", str);
int len = strlen(str);
int max_len = 0;
int max_start = -1;
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (str[i] == str[j]) { // 找到相同字符
int k = 1;
while (i + k < j && j + k < len && str[i + k] == str[j + k]) {
k++;
}
if (i + k == j || j + k == len) { // 判断是否为等值子串
if (k > max_len) {
max_len = k;
max_start = i;
}
}
}
}
}
if (max_len > 0) { // 输出最长等值子串
printf("%.*s\n", max_len, str + max_start);
} else {
printf("无等值字串\n");
}
return 0;
}
```
该程序采用定长顺序存储方式,使用两重循环遍历字符串中的所有字符,找到相同的字符后,再向后匹配,判断是否为等值子串。如果找到了等值子串,则记录其长度和起始位置,最后输出最长等值子串;如果没有找到等值子串,则输出“无等值字串”。
阅读全文