首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建自己的strrchr()函数但不敏感

创建自己的strrchr()函数但不敏感
EN

Stack Overflow用户
提问于 2022-05-04 10:54:23
回答 1查看 99关注 0票数 -3

我的练习是在c中创建自己的strrchr()函数。

我的解决方案是循环。我在数数组的长度。我将把这个数字输入到for循环中。例如:输入Hello。我会从右到左去寻找一封信。

不起作用的是返回部分。

我的代码返回下面的输入Hello和搜索字母l.lo。这不是我需要的。我的任务应该是lleH。

知道我做错了什么吗?

代码语言:javascript
复制
    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;
}

好吧,我发现我的代码像预期的那样工作.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-04 11:35:59

标准C函数strrchr的声明方式如下

代码语言:javascript
复制
char *strrchr(const char *s, int c);

也就是说,第一个参数具有限定符const,第二个参数的类型为int。这意味着您不能更改源字符串。

这也是for循环

代码语言:javascript
复制
for (int i = stringcnt-1; arr[i]; i--)

由于不正确的条件而调用未定义的行为。

该函数可以按照以下方式定义,如下面的演示程序所示。

代码语言:javascript
复制
#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 );
    }
}

程序输出是

代码语言:javascript
复制
position = 3, substring = Lo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72111803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档