用c语言写一个程序实现找出最长后缀字符串的功能
时间: 2023-05-23 09:03:19 浏览: 113
您好,下面是用c语言实现找出最长后缀字符串的程序:
```c
#include<stdio.h>
#include<string.h>
int main() {
char str[100]; // 声明字符串
int len;
printf("请输入一个字符串:\n");
scanf("%s", str); // 获取输入的字符串
len = strlen(str); // 获取字符串长度
for(int i = len - 1; i >= 0; i--) { // 倒序遍历字符串
if(str[i] == '.') { // 找到后缀的分隔符'.'
printf("最长的后缀串是: %s\n", &str[i+1]); // 输出后缀串
break;
}
}
return 0;
}
```
希望能够帮到您!
相关问题
用c语言写一个程序实现找出最长公共后缀字符串的功能
可以使用字典树(Trie)的方法进行最长公共后缀的查找,具体实现步骤如下:
1. 将所有字符串插入到字典树中,并记录每个节点的出现次数。
2. 从根节点开始,对每个节点的子节点按照字典序排序,遍历排序后的最后一个节点。
3. 如果某个节点的出现次数等于字符串个数,说明这个节点可以作为最长公共后缀的候选节点。
4. 对于所有的候选节点,按照深度从小到大排序,选取深度最大的节点作为最长公共后缀。
实现代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_N 100
#define MAX_L 100
typedef struct Node {
int cnt;
struct Node* next[26];
} Node;
void insert(Node* root, char* str) {
int len = strlen(str);
Node* cur = root;
for (int i = len - 1; i >= 0; --i) {
int idx = str[i] - 'a';
if (cur->next[idx] == NULL) {
cur->next[idx] = (Node*) malloc(sizeof(Node));
memset(cur->next[idx], 0, sizeof(Node));
}
cur = cur->next[idx];
++cur->cnt;
}
}
int dfs(Node* root, char* ans, int dep) {
int flag = 0;
for (int i = 0; i < 26; ++i) {
if (root->next[i] != NULL && root->next[i]->cnt == MAX_N) {
ans[dep] = 'a' + i;
flag = 1;
dfs(root->next[i], ans, dep + 1);
}
}
if (!flag && dep > 0) {
ans[dep] = '\0';
return 1;
}
return 0;
}
int main() {
int n;
char str[MAX_N][MAX_L];
Node* root = (Node*) malloc(sizeof(Node));
memset(root, 0, sizeof(Node));
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%s", str[i]);
insert(root, str[i]);
}
char ans[MAX_L];
dfs(root, ans, 0);
if (strcmp(ans, "") == 0) {
printf("No common suffix found.\n");
} else {
printf("The longest common suffix is \"%s\"\n", ans);
}
return 0;
}
编写程序,找出输入的n个字符串中最长的字符串,用C语言实现
以下是一个简单的 C 语言程序,实现了找出输入的 n 个字符串中最长的字符串的功能:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100 // 假设最长字符串长度不超过100
int main() {
int n, i;
char str[MAX_LEN], longest[MAX_LEN];
printf("请输入字符串数量 n:");
scanf("%d", &n);
printf("请输入 %d 个字符串:\n", n);
scanf("%s", longest); // 先把第一个字符串读入作为最长字符串
for (i = 1; i < n; i++) {
scanf("%s", str);
if (strlen(str) > strlen(longest)) {
strcpy(longest, str);
}
}
printf("最长的字符串是:%s\n", longest);
return 0;
}
```
程序的大致思路是,先读入第一个字符串作为最长字符串,然后依次读入后面的字符串,如果发现某个字符串比最长字符串还要长,就用 strcpy() 函数将它复制到最长字符串中。最终输出最长字符串即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)