北航2016C语言|程序设计题七

七、程序设计题(本题15分)
  字符串处理函数strmap(s1,s2)可以比较两个字符串的大小,其字符的大小是以ASCII码表上的顺序决定的。该函数首先将s1第一个字符值减去s2的第一个字符值,若相差值为0则继续比较对应的下一个字符,若不为0则该差值就是函数的最终结果。
  请参照改函数的实现原理,写出一个新的字符串比较函数strcmp_nc(s1,s2),该函数的功能与strcmp类似,但不区分字符串中的大小写字母,例如字符a和字符A相等。
  要求:实现过程中不得使用任何已有的关于字符和字符串处理的库函数。

首先我们看看下原生strcmp函数的参数方法。

C 库函数 - strcmp()
描述
C 库函数 **int strcmp(const char str1, const char str2)str1 所指向的字符串和 str2 所指向的字符串进行比较。
声明
下面是 strcmp() 函数的声明。
参数
str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。
返回值
该函数返回值如下:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

python3.7版

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def strcmp_nc(s1,s2):
    #取出两字符串的长度
    s1_num = len(s1)
    s2_num = len(s2)
    #循环两字符串并做比较
    while s1_num and s2_num:
        s1_ch = s1[-s1_num]
        s2_ch = s2[-s2_num]
        num = A_a(s1_ch) - A_a(s2_ch)
        if num == 0:
            s1_num -= 1
            s2_num -= 1
        else:
            return num
    #循环结束仍然没有返回值,然后对长度判断
    if s1_num == s2_num:
        return 0
    elif s1_num > s2_num :
        s=s1_num - s2_num
        s1_ch = s1[-s]
        A_a(s1_ch)
        return A_a(s1_ch)
    elif s1_num < s2_num:
        s = s2_num - s1_num
        s2_ch = s2[-s]
        return 0 - A_a(s2_ch)
    else:
        return False

#定义函数,大写变小写
def A_a(str):
    if str >= "A" and str <= "Z":
        return ord(str) + 32
    elif str >= "a" and str <= "z":
        return ord(str)
    else:
        print('请输入字母')
        return False
if __name__ == '__main__':
    s1 = input("请输入s1字符串\n")
    s2 = input("请输入s2字符串\n")
    b=strcmp_nc(s1,s2)
    print(b)
  • 执行结果1
请输入s1字符串
XiAoPeng
请输入s2字符串
xiaopENg
0
  • 执行结果2
请输入s1字符串
XiaoPengPeng
请输入s2字符串
Xiaopeng
112

C语言版本

#include <stdio.h>
#include<string.h>
//定义函数,大写变小写
int A_a(char str){
    if (str >= 'A' && str <= 'Z')
        return str + 32;
    if (str >= 'a' && str <= 'z')
        return str;
    else
        return false;
}
//定义比较字符串函数
int strcmp_nc(char s1[],char s2[]){
  //定义两个指针
    char *p1 = s1;
    char *p2 = s2;
    int num,s1_num,s2_num;
  //取出两个字符串长度,以便在不等长的情况下比较。
    s1_num = strlen(s1);
    s2_num = strlen(s2);
  //当两个字符相等的时候,指针后移,直到"\0"
    while (*p1 && *p2){
        num = A_a(*p1)-A_a(*p2);
        if (num == 0){
        p1++;
        p2++;            
        }
        else
            return num;
    }
    if (s1_num == s2_num)
        return 0;
    if (s1_num > s2_num){
        return A_a(*p1);
    }
    if (s1_num < s2_num){
        return (0- A_a(*p2));
    }
    else
        return false;
}
int main(void){
    char s1[10];
    char s2[10];
    int num;
    scanf("%s",s1);
    scanf("%s",s2);
    num = strcmp_nc(s1,s2);
    printf("%d",num);
    return 0;
}
  • 执行结果1
XiAoPeng
xiaopENg
0
  • 执行结果2
XiaoPengPeng
Xiaopeng
112

猜你喜欢

转载自blog.csdn.net/weixin_34148508/article/details/87400050