gpt4 book ai didi

c - 重新创建 strstr() 函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:58 25 4
gpt4 key购买 nike

你好,我正在尝试创建自己的 strstr() 函数,但我无法弄清楚为什么它会返回段错误。我正在尝试在另一个字符串中搜索一个字符串,然后返回指向第一个“相同”字母的指针。任何帮助,将不胜感激。这是我的代码:

char* ms_search(char *Str1,char* Str2){
char* p = NULL;
int i,k=0,j = 0;
for(i = 0;i < ms_length(Str1); i++){
if(Str1[i] == Str2[k]){
if(k == 0){
p = &Str1[i];
j= i;
}
if(k == ms_length(Str2)){
break;
}
k++;
}
else{
if(Str1[i] == Str2[0]){
p = &Str1[i];
k=1;
j= i;
}
else{
j=0;
k = 0;
p = NULL;
}
}
}
if(p != NULL){
Str1[ms_length(Str2)+1] = '\0';
}
return &Str1[j];
}
int main(){
int i;
char* p2;
char* p="lolaaa";
char* p1= "aaa";
//char ar2[] = "aaa4";
//ms_copy(p,p1);
//printf("%s",p);
//ms_nconcat(p,p1,3);
//if(ms_ncompare(p,p1,3) == 1) printf("einai idia");
p2 = ms_search(p,p1);
printf("%s",p2);
return 0;
}

最佳答案

Hello i am trying to make my own strstr()

首先你必须遵循C标准。

C89/C99原型(prototype)是:

char *strstr(const char *s1, const char *s2);

标准 strstr() 函数不会改变传递的缓冲区。

功能描述如下:

strstr() 函数在 s1 指向的字符串中定位字符序列(不包括终止空字符)在指向的字符串中的第一次出现s2.

strstr 函数返回指向所定位字符串的指针,如果未找到该字符串,则返回空指针。如果 s2 指向长度为零的字符串,则该函数返回 s1

在标准 C 中,这可以实现为:

#include <string.h> /* size_t memcmp() strlen() */
char *strstr(const char *s1, const char *s2)
{
size_t n = strlen(s2);
while(*s1)
if(!memcmp(s1++,s2,n))
return (char *) (s1-1);
return 0;
}

独立实现如下:

#include <stdio.h>

char *strstr1(const char *str, const char *substring)
{
const char *a;
const char *b;

b = substring;

if (*b == 0) {
return (char *) str;
}

for ( ; *str != 0; str += 1) {
if (*str != *b) {
continue;
}

a = str;
while (1) {
if (*b == 0) {
return (char *) str;
}
if (*a++ != *b++) {
break;
}
}
b = substring;
}

return NULL;
}

int main (void)
{
char string[64] ="This is a test string for testing strstr";
char *p;

p = strstr1 (string,"test");

if(p)
{
printf("String found:\n" );

printf ("First occurrence of string \"test\" in \"%s\" is:\n%s", string, p);
}
else
{
printf("String not found!\n" );
}

return 0;
}

输出:

String found:
First occurrence of string "test" in "This is a test string for testing strstr" is:
test string for testing strstr

关于c - 重新创建 strstr() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49131175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com