用c语言试设计程序:如果字符串的一个子串(其长度大 1)的各个字符均相同,则称之为等值子串。输入字符串 S,以‘!’为结束标志,如果串 S 中不存在等值子串,则输出信息:” 无等值子串”,否则求出(输出)一个长度最大的等值子串。
时间: 2024-01-22 11:19:29 浏览: 108
以下是用C语言实现的程序:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[1000]; // 声明输入的字符串
int len, max_len = 0, start = 0; // len 统计当前等值子串长度,max_len 统计最长等值子串长度,start 记录最长等值子串的起始位置
printf("请输入字符串(以!结尾):");
scanf("%[^!]", str); // 读取字符串直到遇到 !
len = 1; // 初始等值子串长度为 1
for (int i = 1; i < strlen(str); i++) { // 从第二个字符开始遍历输入字符串
if (str[i] == str[i-1]) { // 如果当前字符与前一个字符相同
len++; // 等值子串长度加一
if (len > max_len) { // 如果当前等值子串长度大于最长等值子串长度
max_len = len; // 更新最长等值子串长度
start = i - max_len + 1; // 更新最长等值子串的起始位置
}
} else { // 如果当前字符与前一个字符不同
len = 1; // 等值子串长度重置为 1
}
}
if (max_len == 0) { // 如果不存在等值子串
printf("无等值子串\n");
} else { // 存在等值子串
printf("最长等值子串为:");
for (int i = start; i < start + max_len; i++) { // 输出最长等值子串
putchar(str[i]);
}
printf("\n");
}
return 0;
}
```
该程序读入一个字符串,遍历字符串并统计等值子串的长度,同时记录最长等值子串的起始位置和长度。如果不存在等值子串,则输出提示信息;否则输出最长等值子串。
阅读全文