C语言判断一个字符串中是否存在某个子串
时间: 2023-05-17 18:05:13 浏览: 137
可以使用strstr函数来判断一个字符串中是否存在某个子串。该函数的原型为:char *strstr(const char *str1, const char *str2),其中str1为要查找的字符串,str2为要查找的子串。如果找到了子串,则返回子串在字符串中的首地址;如果没有找到,则返回NULL。
相关问题
C语言查找两个字符串中的最大公共子串
可以使用动态规划算法来查找两个字符串中的最大公共子串。具体步骤如下:
1. 定义一个二维数组dp,其中dp[i][j]表示以第一个字符串的第i个字符和第二个字符串的第j个字符结尾的最长公共子串的长度。
2. 初始化dp数组,将第一行和第一列都赋值为0。
3. 遍历两个字符串,如果第一个字符串的第i个字符和第二个字符串的第j个字符相等,则dp[i][j] = dp[i-1][j-1] + 1;否则dp[i][j] = 0。
4. 在遍历的过程中,记录下最长的公共子串的长度和结束位置。
5. 根据结束位置和最长公共子串的长度,可以得到最长公共子串。
以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
void findLCS(char *str1, char *str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int dp[len1+1][len2+1];
int maxLen = 0;
int endPos = 0;
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1[i-1] == str2[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
if (dp[i][j] > maxLen) {
maxLen = dp[i][j];
endPos = i;
}
} else {
dp[i][j] = 0;
}
}
}
if (maxLen == 0) {
printf("没有找到公共子串\n");
} else {
printf("最长公共子串为:");
for (int i = endPos - maxLen; i < endPos; i++) {
printf("%c", str1[i]);
}
printf("\n");
}
}
int main()
{
char str1[] = "abcdefg";
char str2[] = "bcdehij";
findLCS(str1, str2);
return 0;
}
```
输出结果为:
```
最长公共子串为:bcde
```
编写一个程序输入字符串判断字符串是否是子串C语言
下面是一个简单的程序,可以输入一个字符串和一个子串,判断子串是否在字符串中出现过:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100], substr[100];
printf("Enter a string: ");
scanf("%s", str);
printf("Enter a substring: ");
scanf("%s", substr);
if (strstr(str, substr) != NULL) {
printf("'%s' is a substring of '%s'\n", substr, str);
} else {
printf("'%s' is not a substring of '%s'\n", substr, str);
}
return 0;
}
```
该程序使用了 C 标准库中的 `strstr` 函数来查找子串是否在字符串中出现过。如果 `strstr` 函数返回值不为 `NULL`,则说明子串在字符串中出现过,否则说明子串不在字符串中出现过。