| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1149 人关注过本帖
标题:求解两个c++题目(使用数组)
只看楼主 加入收藏
Xovery
Rank: 2
等 级:论坛游民
帖 子:29
专家分:14
注 册:2022-10-22
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
求解两个c++题目(使用数组)
1. 编程实现字符串比较函数 strcmp 的功能

提示:比较两个字符串的大小,即对两个字符串自左至右逐个字符相比(ASCII值大的为大),直到出现不同的字符或遇到‘\0’为止。如全部字符相同,则认为相等;若出现不同的字符,则以第一个不相同的字符的比较结果为准。 如:“A”<“B”, “computer”>”compare”

 返回值

(1) 零: 两个串相等;

(2) 正数, str1>str2;

(3) 负数, str1<str2

2. 编写 strstr(char *str1,char *str2) 的实现过程。strstr 函数的功能是在 str1 中找 str2 首次出现的位置;

即:输入两个字符串,输入str2在str1中首次出现的位置(以0为基),未发现输出-1.

例:

str1[ ] = “The quick brown dog jumps over the lazy fox ”;

str2[ ] = “lazy”;

则输出结果为 36
搜索更多相关主题的帖子: 字符串 字符 出现 数组 c++ 
2022-11-07 01:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:15 
第二个我做不到,既要返回索引,又要返回-1。
size_t 不行,当返回值为 SIZE_MAX 时无法区分是在 SIZE_MAX 找到了子字符串还是没找到返回了 size_t(-1)
ssize_t 更不行
ptrdiff_t 也不行,当 大于PTRDIFF_MAX 小于SIZE_MAX 时,结果未定义。

程序代码:
#include <stdio.h>

int my_strcmp( const char* lhs, const char* rhs )
{
    for( ; *lhs!='\0' && *lhs==*rhs; ++lhs,++rhs);
    
    unsigned char a = *(const unsigned char*)lhs;
    unsigned char b = *(const unsigned char*)rhs;
    return a-b;
}

char* my_strstr( const char* str, const char* substr )
{
    if( !*substr )
        return (char*)str;

    for( ; *str; ++str )
    {
        const char* p = str;
        const char* q = substr;
        for( ; *q!=0 && *p==*q; ++p,++q );
        if( !*q )
            return (char*)str;
    }
    return NULL;
}

#include <iostream>
using namespace std;

int main( void )
{
    cout << my_strcmp("A","B") << endl;
    cout << my_strcmp("computer","compare") << endl;

    cout << my_strstr("abcd","bc") << endl;
    cout << my_strstr("abcd","cd") << endl;
    cout << my_strstr("abcd","") << endl;
    cout << my_strstr("","") << endl;

    const char* s = "The quick brown dog jumps over the lazy fox";
    cout << (my_strstr(s,"lazy")-s) << endl;
}
2022-11-07 09:41
Xovery
Rank: 2
等 级:论坛游民
帖 子:29
专家分:14
注 册:2022-10-22
收藏
得分:0 
回复 2楼 rjsp
我想问一下,代码中的
for( ; *lhs!='\0' && *lhs==*rhs; ++lhs,++rhs);
;前面省略了什么?
&&是什么意思,该怎么用
2022-11-08 15:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
没有省略什么,这里不需要初始化;&& 是逻辑的“并且”

for( a; b; c )
    d;
等同于
{
    a;
    while( b )
    {
        d;

        c;
    }
}


例如
for( unsigned i=0; i!=10; ++i )
{
    printf("%d\n",i);
}
等同于
{
    unsigned i = 0;
    while( i != 10 )
    {
        printf("%d\n",i);

        ++i;
    }
}

2022-11-08 16:25
Xovery
Rank: 2
等 级:论坛游民
帖 子:29
专家分:14
注 册:2022-10-22
收藏
得分:0 
okok,多谢
2022-11-08 23:27
快速回复:求解两个c++题目(使用数组)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051841 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved