七憎兽、程序設(shè)計題(本題15分)
??字符串處理函數(shù)strmap(s1,s2)可以比較兩個字符串的大小,其字符的大小是以ASCII碼表上的順序決定的。該函數(shù)首先將s1第一個字符值減去s2的第一個字符值,若相差值為0則繼續(xù)比較對應(yīng)的下一個字符扭屁,若不為0則該差值就是函數(shù)的最終結(jié)果悲没。
??請參照改函數(shù)的實現(xiàn)原理惩淳,寫出一個新的字符串比較函數(shù)strcmp_nc(s1,s2),該函數(shù)的功能與strcmp類似册倒,但不區(qū)分字符串中的大小寫字母,例如字符a和字符A相等商源。
??要求:實現(xiàn)過程中不得使用任何已有的關(guān)于字符和字符串處理的庫函數(shù)车份。
首先我們看看下原生strcmp函數(shù)的參數(shù)方法。
C 庫函數(shù) - strcmp()
描述
C 庫函數(shù) **int strcmp(const char str1, const char str2) 把 str1 所指向的字符串和 str2 所指向的字符串進行比較牡彻。
聲明
下面是 strcmp() 函數(shù)的聲明扫沼。
參數(shù)
str1 -- 要進行比較的第一個字符串。
str2 -- 要進行比較的第二個字符串庄吼。
返回值
該函數(shù)返回值如下:
如果返回值 < 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)
#循環(huán)兩字符串并做比較
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
#循環(huán)結(jié)束仍然沒有返回值轰坊,然后對長度判斷
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
#定義函數(shù),大寫變小寫
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)
- 執(zhí)行結(jié)果1
請輸入s1字符串
XiAoPeng
請輸入s2字符串
xiaopENg
0
- 執(zhí)行結(jié)果2
請輸入s1字符串
XiaoPengPeng
請輸入s2字符串
Xiaopeng
112
C語言版本
#include <stdio.h>
#include<string.h>
//定義函數(shù),大寫變小寫
int A_a(char str){
if (str >= 'A' && str <= 'Z')
return str + 32;
if (str >= 'a' && str <= 'z')
return str;
else
return false;
}
//定義比較字符串函數(shù)
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;
}
- 執(zhí)行結(jié)果1
XiAoPeng
xiaopENg
0
- 執(zhí)行結(jié)果2
XiaoPengPeng
Xiaopeng
112