注册 登录
编程论坛 C++教室

求解两个c++题目(使用数组)

Xovery 发布于 2022-11-07 01:23, 1335 次点击
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
4 回复
#2
rjsp2022-11-07 09:41
第二个我做不到,既要返回索引,又要返回-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;
}
#3
Xovery2022-11-08 15:11
回复 2楼 rjsp
我想问一下,代码中的
for( ; *lhs!='\0' && *lhs==*rhs; ++lhs,++rhs);
;前面省略了什么?
&&是什么意思,该怎么用
#4
rjsp2022-11-08 16:25
没有省略什么,这里不需要初始化;&& 是逻辑的“并且”

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;
    }
}

#5
Xovery2022-11-08 23:27
okok,多谢
1