用C语言写一个确定是否子串在主串的代码
时间: 2024-05-09 18:18:12 浏览: 9
好的,以下是用C语言写一个确定是否子串在主串的代码:
```
#include <stdio.h>
#include <string.h>
int main()
{
char main_str[100], sub_str[100];
printf("请输入主串:\n");
fgets(main_str, sizeof(main_str), stdin);
printf("\n请输入子串:\n");
fgets(sub_str, sizeof(sub_str), stdin);
if (strstr(main_str, sub_str) != NULL)
{
printf("\n子串是主串的一部分\n");
}
else
{
printf("\n子串不是主串的一部分\n");
}
return 0;
}
```
请问还有需要我为您服务的问题吗?
相关问题
C语言如何在字符串中查找重复的子串?
在 C 语言中,可以使用暴力枚举和 KMP 算法来查找重复的子串。
暴力枚举的思路是对于每一个子串,都在原字符串中查找是否有相同的子串。时间复杂度为 O(n^3)。
KMP 算法则是通过预处理模式串,以达到在匹配过程中可以跳过一些不必要的比较,从而提高匹配效率。时间复杂度为 O(n+m),其中 n 和 m 分别是原字符串和模式串的长度。具体实现可以参考网上的 KMP 算法实现代码。
需要注意的是,在查找重复的子串时,需要先确定子串的长度范围。可以根据实际情况来确定,比如可以从长度为 2 开始,一直到原字符串的一半。
c语言编程:输入一个无空格字符串和一个长度为2的子串,求该子串在该字符串中出现的次数,如果查找子串是相同的2个字符,那么记过次数的字母不再计入。
好的,下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], substr[3]; // 定义字符串和子串数组
int len, count = 0, i = 0, j; // 定义长度、计数器和循环变量
printf("请输入一个无空格字符串:");
fgets(str, sizeof(str), stdin); // 从标准输入中读取字符串
len = strlen(str);
printf("请输入一个长度为2的子串:");
fgets(substr, sizeof(substr), stdin); // 从标准输入中读取子串
// 遍历字符串
while (i < len - 1)
{
if (str[i] == substr[0] && str[i+1] == substr[1]) // 判断是否匹配子串
{
count++; // 匹配次数加1
i += 2; // 直接跳过子串
continue;
}
else if (substr[0] == substr[1] && (str[i] == substr[0] || str[i] == substr[1]))
{
i++; // 如果子串是相同的2个字符,那么跳过这个重复的字符
continue;
}
i++; // 继续遍历字符串
}
printf("子串在字符串中出现的次数为:%d\n", count);
return 0;
}
```
这里使用了 `fgets()` 函数来读取字符串和子串,因为它可以处理空格并且可以限制输入的长度。在遍历字符串时,使用了循环变量 `i`,并且每次增加的步长根据是否匹配子串来确定。如果子串是相同的两个字符,那么在匹配时需要跳过一个字符,否则会重复计数。