用c语言试设计一个程序:如果字符串的一个子串(其长度大 1)的各个字符均相同,则称之为等值子串。输入字符串 S,以‘!’为结束标志,如果串 S 中不存在等值子串,则输出信息:” 无等值子串”,否则求出(输出)一个长度最大的等值子串。
时间: 2024-01-21 09:19:10 浏览: 68
以下是用C语言实现的程序,实现了上述要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int main() {
char s[MAX_LEN];
scanf("%s", s);
int len = strlen(s);
int max_len = 0, start = 0, end = 0;
for (int i = 0; i < len - 1; i++) { // i指向子串的起始位置
if (s[i] == s[i+1]) { // 子串的第一个字符与第二个字符相同
int j = i + 1; // j指向子串的下一个字符
while (j < len && s[j] == s[i]) j++; // j向后扫描
if (j - i > max_len) { // 更新最大长度和起始、终止位置
max_len = j - i;
start = i;
end = j - 1;
}
}
}
if (max_len == 0) {
printf("无等值子串\n");
} else {
printf("长度最大的等值子串为:");
for (int i = start; i <= end; i++) {
printf("%c", s[i]);
}
printf("\n");
}
return 0;
}
```
程序首先读入字符串 `s`,然后遍历字符串,对于每一个位置,判断其与下一个位置的字符是否相同,如果相同则向后扫描,直到字符不同或扫描到字符串末尾。如果扫描得到的子串长度大于之前找到的最大长度,则更新最大长度和起始、终止位置。最后根据最大长度是否为0输出结果。
阅读全文