gpt4 book ai didi

c - 查找较大字符串中子字符串的位置

转载 作者:行者123 更新时间:2023-11-30 16:54:07 24 4
gpt4 key购买 nike

我创建了一个函数,该函数应该查找较大字符串中子字符串的第一个字符的数字位置。我的输出遇到一些问题,但我不太清楚为什么。这些问题包括每次都返回 -1 而不是子字符串的整数位置。我已经调试过了,无法追踪到函数哪里出错了。

这就是函数应该执行的方式:如果我的字符串是“The Dog was fast”并且我正在搜索子字符串“dog”,则函数应该返回 4。感谢 chqrlie 对循环的帮助。

这是函数:

int findSubString(char original[], char toFind[]) {

size_t i, j;
int originalLength = 0;
int toFindLength = 0;

originalLength = strlen(original) + 1;
toFindLength = strlen(toFind) + 1;

for (i = 0; i < toFindLength + 1; i++) {
for (j = 0; j < originalLength + 1; j++) {
if (toFind[j] == '\0') {
return i;
}
if (original[i + j] != toFind[j]) {
break;
}
}
if (original[i] == '\0') {
return -1;
}
}
}

函数参数不能修改,这是要求。任何帮助表示赞赏!

最佳答案

循环内的这些语句

       if (toFind[j] == '\0') {
return i;
}

会导致未定义的行为,因为字符串 toFind 可能比字符串 original 短。

对于这个循环同样有效

        if (original[i + j] != toFind[j]) {
break;
}

因为i + j可以大于字符串original的长度。

如果您要查找其中的子字符串,则无需扫描字符串 original 的所有字符。

此外,您还应该检查字符串original的长度是否不小于字符串toFind的长度。

如果您只想在字符串 original 中查找字符串 toFind 的第一个字符,则使用标准 C 函数 strchr 就足够了。如果您想在字符串 original 中查找整个字符串 toFind,那么您可以使用另一个 C 标准函数 strstr

如果您想自己编写函数来在其他字符串中查找字符串,那么它可以按以下方式查找

我声明了这个函数

long long int findSubString( const char original[], const char toFind[] );

但是您可以根据需要编写其声明,例如

int findSubString( char original[], char toFind[] );

但在这种情况下,您应该声明函数局部变量success,例如

int success = -1;

并使用格式说明符“%d”而不是“%lld”输出结果。

给你。

#include <stdio.h>
#include <string.h>
#include <stddef.h>

long long int findSubString( const char original[], const char toFind[] )
{
size_t n = strlen( original );
size_t m = strlen( toFind );

long long int success = -1;

if ( !( n < m ) )
{
n = n - m + 1;

for ( size_t i = 0; success == -1 && i < n; i++ )
{
size_t j = 0;
while ( j < m && original[i+j] == toFind[j] ) j++;

if ( j == m ) success = i;
}
}

return success;
}

int main(void)
{
printf( "%lld\n", findSubString( "The dog was fast", "dog" ) );

return 0;
}

它的输出是

4

关于c - 查找较大字符串中子字符串的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40639901/

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