制作自己的 strchr() 函数但不区分大小写
Make own strrchr() function but case-insensitiv
我的练习是在 c 中创建我自己的 strrchr() 函数。
我的解决方案是一个循环。我正在计算数组长度。我会将这个数字输入到 for 循环中。例如:输入你好。我会从右到左搜索一个字母。
return 部分不起作用。
我的代码 return 以下是输入 Hello 并搜索字母 l。瞧。那不是我需要的。我的输出应该是 lleH.
知道我做错了什么吗?
char *KULstrrcichr(char *arr, char search)
// The strrchr() function returns a pointer to the last occurrence of the character c in the string s.
{
int stringcnt;
stringcnt = strlen(arr);
printf("%d\n", stringcnt);
search = tolower(search);
for (int i = stringcnt-1; arr[i]; i--)
{
arr[i] = tolower(arr[i]);
}
for (int i = stringcnt-1; arr[i]; i--)
{
if (search == arr[i])
{
return &arr[i];
}
}
return 0;
}
好的,我发现我的代码按预期工作...
标准 C 函数 strrchr
声明如下
char *strrchr(const char *s, int c);
也就是说,第一个参数的限定符是const
,第二个参数的类型是int
。这意味着您不能更改源字符串。
还有这个for循环
for (int i = stringcnt-1; arr[i]; i--)
由于不正确的条件调用未定义的行为。
该函数可以通过以下方式定义,如下面的演示程序所示。
#include <string.h>
#include <stdio.h>
#include <ctype.h>
char * my_strrchr( const char *s, int c )
{
c = tolower( ( unsigned char )c );
const char *p = s + strlen( s ) + 1;
while (p != s && tolower( ( unsigned char )p[-1] ) != c) --p;
return p == s ? NULL : ( char * )( p - 1 );
}
int main( void )
{
char s[] = "helLo";
char *p = my_strrchr( s, 'l' );
if (p != NULL)
{
printf( "position = %td, substring = %s\n", p - s, p );
}
}
程序输出为
position = 3, substring = Lo
我的练习是在 c 中创建我自己的 strrchr() 函数。
我的解决方案是一个循环。我正在计算数组长度。我会将这个数字输入到 for 循环中。例如:输入你好。我会从右到左搜索一个字母。
return 部分不起作用。
我的代码 return 以下是输入 Hello 并搜索字母 l。瞧。那不是我需要的。我的输出应该是 lleH.
知道我做错了什么吗?
char *KULstrrcichr(char *arr, char search)
// The strrchr() function returns a pointer to the last occurrence of the character c in the string s.
{
int stringcnt;
stringcnt = strlen(arr);
printf("%d\n", stringcnt);
search = tolower(search);
for (int i = stringcnt-1; arr[i]; i--)
{
arr[i] = tolower(arr[i]);
}
for (int i = stringcnt-1; arr[i]; i--)
{
if (search == arr[i])
{
return &arr[i];
}
}
return 0;
}
好的,我发现我的代码按预期工作...
标准 C 函数 strrchr
声明如下
char *strrchr(const char *s, int c);
也就是说,第一个参数的限定符是const
,第二个参数的类型是int
。这意味着您不能更改源字符串。
还有这个for循环
for (int i = stringcnt-1; arr[i]; i--)
由于不正确的条件调用未定义的行为。
该函数可以通过以下方式定义,如下面的演示程序所示。
#include <string.h>
#include <stdio.h>
#include <ctype.h>
char * my_strrchr( const char *s, int c )
{
c = tolower( ( unsigned char )c );
const char *p = s + strlen( s ) + 1;
while (p != s && tolower( ( unsigned char )p[-1] ) != c) --p;
return p == s ? NULL : ( char * )( p - 1 );
}
int main( void )
{
char s[] = "helLo";
char *p = my_strrchr( s, 'l' );
if (p != NULL)
{
printf( "position = %td, substring = %s\n", p - s, p );
}
}
程序输出为
position = 3, substring = Lo