列表

详情


CPP31. 比较字符串大小

描述

编写一个函数 int mystrcmp(const char * src, const char * dst),用于比较两个字符串的大小(自己实现strcmp()函数)。要求如果字符串src大于字符串dst返回 1,小于返回 -1,相等返回 0。

输入描述

键盘录入 2 个长度小于 100 的字符串

输出描述

输出调用 mystrcmp() 函数返回的结果

示例1

输入:

hello
helloworld

输出:

-1

示例2

输入:

hello
hello

输出:

0

示例3

输入:

helloworld
hello

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2021-12-14

#include <iostream>
using namespace std;

int mystrcmp(const char* src, const char* dst);

int main() {

    char s1[100] = { 0 };
    char s2[100] = { 0 };

    cin.getline(s1, sizeof(s1));
    cin.getline(s2, sizeof(s2));

    int ret = mystrcmp(s1, s2);

    cout << ret << endl;

    return 0;
}

int mystrcmp(const char* src, const char* dst) {

    // write your code here......
    while(*src&&*dst)
    {
        if(*src-*dst>0)
        {
            return 1;
        }
        else if(*src-*dst<0)
        {
            return -1;
        }
        src++;
        dst++;
    }
    if(*src=='\0'&&*dst!='\0')
    {
        return -1;
    }
    else if(*src=='\0'&&*dst=='\0')
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2022-03-03

#include<stdio.h>
int main()
{
    char src[100];
    while(scanf("%s",src)!=EOF)
    {
        char dst[100];
        scanf("%s",dst);
    int len1=strlen(src);
    int len2=strlen(dst);
    int i,j,k;
    int result;
    if(len1<len2)
    {
        result=-1;
        for(i=0;i<len1;++i)
        {
            if(src[i]>dst[i])
            {
                result=1;
            break;
            }
        }
    }
    else if(len1>len2)
    {
        result=1;
        for(j=0;j<len2;++j)
        {
            if(src[j]<dst[j])
            {
                result=-1;
            break;
            }
        }
    }
    else
        result=0;
    for(k=0;k<len1;++k)
    {
        if(src[k]<dst[k])
        {
            result=-1;
            break;
        }
        else if(src[k]>dst[k])
        {
            result=1;
            break;
        }
    }
    printf("%d\n",result);
    return 0;
    }
}

C++ 解法, 执行用时: 2ms, 内存消耗: 388KB, 提交时间: 2021-12-05

#include <iostream>
using namespace std;
int m=0,n=0;

int mystrcmp(const char* src, const char* dst);

int main() {

    char s1[100] = { 0 };
    char s2[100] = { 0 };

    cin.getline(s1, sizeof(s1));
    cin.getline(s2, sizeof(s2));

    int ret = mystrcmp(s1, s2);

    cout << ret << endl;

    return 0;
}

int mystrcmp(const char* src, const char* dst)
{
while(1)
{
  if(int(*src)>int(*dst))
  {
      m=1;
    break;
  }
    else if(int(*src)==int(*dst))
  {
      m=0;
      
  }
    else 
    {
        m=-1;
      break;
    }
    if(*src==*dst&&(*src)==0)
    {
        m=0;
        break;
    }
    dst++;
    src++;
}

    return m;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2022-02-10

#include <iostream>
using namespace std;

int mystrcmp(const char* src, const char* dst);

int main() {

    char s1[100] = { 0 };
    char s2[100] = { 0 };

    cin.getline(s1, sizeof(s1));
    cin.getline(s2, sizeof(s2));

    int ret = mystrcmp(s1, s2);

    cout << ret << endl;

    return 0;
}

int mystrcmp(const char* src, const char* dst) {

    // write your code here......
    int a=0;
    for(; *src != '\0' || *dst != '\0';src++,dst++){
        if(*src > *dst){
            a = 1;
            break;
        }
        else if(*src < *dst){
            a = -1;
            break;
        }
    }
    return a;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2022-01-25

#include <iostream>
#include <cstring>
using namespace std;

int mystrcmp(const char* src, const char* dst);

int main() {

    char s1[100] = { 0 };
    char s2[100] = { 0 };

    cin.getline(s1, sizeof(s1));
    cin.getline(s2, sizeof(s2));

    int ret = mystrcmp(s1, s2);

    cout << ret << endl;

    return 0;
}

int mystrcmp(const char* src, const char* dst) {

    //计算src和dst长度
    int len1=strlen(src);
    int len2=strlen(dst);
    int i=0,j=0;
    while(i<len1&&j<len2){
        //如果src当前字符小于dst,说明src小于dst,返回-1
        if(src[i]<dst[j]){
            return -1;
        }
        //如果src当前字符大于dst,说明src大于dst,返回1
        else if(src[i]>dst[j]){
            return 1;
        }
        //如果src当前字符等于dst,两指针后移
        else{
            i++;
            j++;
        }
    }
    //如果src后面还有字符,返回1
    if(i<len1){
        return 1;
    }
    //如果dst后面还有字符,返回-1
    else if(j<len2){
        return -1;
    }
    else{
        return 0;
    }
    return 0;

}

上一题