若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
时间: 2024-05-06 17:21:54 浏览: 68
C语言中可以使用库函数strstr()实现该功能。
函数原型为:
```c
char *strstr(const char *str1, const char *str2);
```
其中,str1是要查找的字符串,str2是要查找的子串。
函数返回值为指向str2在str1中首次出现的地址的指针,如果str2不是str1的子串,则返回NULL。
示例代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str1[20] = "hello world";
char str2[10] = "world";
char *p;
p = strstr(str1, str2);
if (p != NULL) {
printf("str2 is a substring of str1, position: %d\n", p - str1);
} else {
printf("str2 is not a substring of str1\n");
}
return 0;
}
```
输出结果为:
```
str2 is a substring of str1, position: 6
```
相关问题
它的作用是:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。 下面,请你设计算法简单实现函数strstr(),若存在返回子串首次出现的下标(从0开始),若不存在返回-1。
好的,我能够帮你设计算法简单实现函数strstr()。以下是我的实现:
```C++
int strstr(const char* str1, const char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len2 == 0) {
return 0;
}
for (int i = 0; i < len1; i++) {
if (str1[i] == str2[0]) {
int j;
for (j = 0; j < len2 && i + j < len1; j++) {
if (str1[i + j] != str2[j]) {
break;
}
}
if (j == len2) {
return i;
}
}
}
return -1;
}
```
这里我使用了双重循环,首先第一个循环遍历整个字符串 str1,第二个循环则对于每个位置 i,在 str1 中检查是否存在 str2 作为子串。如果在 str1 中找到了 str2,就返回 str2 在 str1 中第一次出现的下标。如果 str2 不是 str1 的子串,则返回 -1。
希望我的答案对你有所帮助。如果你还有其他问题,欢迎继续问我。
任务描述 在C语言中<string.h>头文件内,实现了strstr()函数,其函数原型为: extern char *strstr(char *str1, const char *str2); 它的作用是:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。 下面,请你设计算法简单实现函数strstr(),若存在返回子串首次出现的下标(从0开始),若不存在返回-1。 编程要求 输入 多组数据,每组数据有一行,分别为字符串str1、str2(用空格分开),当两串都为”0”时输入结束。 输出 对于每组数据分别输出一行,若子串存在返回子串首次出现的下标(从0开始),若不存在返回-1; 测试说明 平台会对你编写的代码进行测试: 测试输入: bjfuacm bjfu datastructure hello aaaaaaaaaaab ab 0 0 预期输出: 0 -1 10
抱歉,我可以回答这个问题。
以下是算法的代码实现:
#include <stdio.h>
#include <string.h>
int strstr_index(char* str1, char* str2){
int len1 = strlen(str1);
int len2 = strlen(str2);
if(len2 > len1){
return -1;
}
for(int i=0; i<=len1-len2; i++){
int j=0;
while(j<len2){
if(str1[i+j] != str2[j]){
break;
}
j++;
}
if(j == len2){
return i;
}
}
return -1;
}
int main(){
char str1[101], str2[101];
while(scanf("%s %s", str1, str2)){
if(strcmp(str1, "0") == 0 && strcmp(str2, "0") == 0){
break;
}
int index = strstr_index(str1, str2);
printf("%d\n", index);
}
return 0;
}
阅读全文