求最大等值子串用指针c语言编写
时间: 2024-02-09 14:07:55 浏览: 31
以下是一个基于指针的C语言函数,可以求出给定字符串中的最长等值子串。该函数返回最长等值子串的长度。
```c
int maxEqualSubstr(char* str) {
int len = strlen(str);
int maxLen = 0;
char* p1 = str;
while (*p1 != '\0') {
char* p2 = p1 + 1;
while (*p2 != '\0' && *p2 == *p1) {
p2++;
}
int currLen = p2 - p1;
if (currLen > maxLen) {
maxLen = currLen;
}
p1 = p2;
}
return maxLen;
}
```
该函数首先获取字符串的长度,然后使用指针p1遍历字符串中的每个字符。对于每个字符,它使用指针p2找到该字符的最长等值子串,并将其长度与当前最大长度进行比较。最终返回最大长度。
相关问题
如果字符串的一个子串(其长度大 1)的各个字符均相同,则称之为等值子串。试设计一算 法:输入字符串 S,以‘!’为结束标志,如果串 S 中不存在等值子串,则输出信息:” 无等值子串”,否则求出(输出)一个长度最大的等值子串。用c语言实现
以下是使用C语言实现的算法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int main() {
char s[MAX_LEN];
fgets(s, MAX_LEN, stdin);
int len = strlen(s) - 1; // 不包括 '\n'
int max_len = 0, max_index = -1;
for (int i = 0; i < len; i++) {
int count = 1;
while (i + count < len && s[i + count] == s[i]) {
count++;
}
if (count > max_len) {
max_len = count;
max_index = i;
}
}
if (max_len > 1) {
printf("最长等值子串是:");
for (int i = 0; i < max_len; i++) {
putchar(s[max_index + i]);
}
printf("\n");
} else {
printf("无等值子串\n");
}
return 0;
}
```
算法思路:
遍历字符串,对于每个字符,向后查找连续相同字符的个数(`count`),如果 `count` 大于最大长度,则更新最大长度和最大长度子串的起始位置(`max_len` 和 `max_index`)。
最后判断最大长度是否大于1,如果是,则输出最长等值子串,否则输出“无等值子串”。
用c语言试设计一个程序:如果字符串的一个子串(长度大 1)的各个字符均相同,则称之为等值子串。输入字符串 S,以‘!’为结束标志,如果串 S 中不存在等值子串,则输出信息:” 无等值子串”,否则求出(输出)一个长度最大的等值子串。
以下是使用C语言编写的程序,可以实现该功能:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100]; // 定义字符串数组
int len, maxLen = 0, start = -1; // 分别表示字符串长度、最大等值子串长度和起始位置
printf("请输入一个字符串(以 ! 结尾):");
scanf("%s", str); // 读入字符串
len = strlen(str); // 计算字符串长度
for (int i = 0; i < len; i++) { // 遍历字符串
int j = i + 1;
while (j < len && str[j] == str[i]) j++; // 查找等值子串
int subLen = j - i; // 计算等值子串长度
if (subLen > maxLen) { // 更新最大等值子串长度和起始位置
maxLen = subLen;
start = i;
}
}
if (start == -1) printf("无等值子串\n"); // 输出结果
else {
printf("最大等值子串为:");
for (int i = 0; i < maxLen; i++) printf("%c", str[start+i]);
printf("\n");
}
return 0;
}
```
该程序首先读入一个字符串,然后遍历字符串,查找等值子串,并计算等值子串的长度。如果找到了等值子串,就比较它的长度和之前找到的最大等值子串的长度,更新最大等值子串的长度和起始位置。最后根据起始位置和最大长度输出最大等值子串,如果没有找到等值子串,则输出“无等值子串”。