###実現したいこと
文字列s[7]
とt[7]
が一致していたらsame
,そうではなくて大文字と小文字の違いだけであったらcase-insentive
,これらに該当しなかったらdifferent
を出力したい。
以下私の考え方です。
0. 文字が一致している->cnt++
0. 1が一致していないとき、s[i]
が大文字でt[i]
が小文字のとき、またはs[i]
が小文字でt[i]
が大文字のとき、それぞれを大文字または小文字変換してそれがt[i]
と一致すればカウント->cnsup++
またはcnlow++
0. 上記以外になったとき->cdiff++
回りくどい気がしますが私が思いついたのはこの程度です。
###問題点
一致しないカウントのcdiff
は何をいれてもカウントが0になってしまう。
printf("もはや全部違う\n");
でwhile
の最後のif
を通過したかどうか確認してみたが出力されることはなかった。
実行例
s: AbcDe t: AbcDf 一致cnt= 5 大文字小文字cnsup= 0 小文字大文字cnlow= 0 違うcdiff= 0 -------------------------------------------------------------------- 文字列を入力してください s: AbCdE t: AbcDe s[2]が大文字でt[2]が大文字のとき s[3]が小文字でt[3]が大文字の時 s[4]が大文字でt[4]が大文字のとき 一致cnt= 3 大文字小文字cnsup= 2 小文字大文字cnlow= 1 違うcdiff= 0 case-insensitive ------------------------------------------------------------------- 文字列を入力してください s: AbcDe t: AbcDe 一致cnt= 6 大文字小文字cnsup= 0 小文字大文字cnlow= 0 違うcdiff= 0 same
###コード
C
1//文字列の比較1 2 3#include<stdio.h> 4#include<ctype.h> 5 6int main(void) 7{ 8 char s[7],t[7]; 9 printf("文字列を入力してください\n"); 10 printf("s: "); 11 fgets(s,7,stdin); 12 printf("t: "); 13 fgets(t,7,stdin); 14 15 int cnt,cnsup,cnlow,cdiff; 16 cnt=0; 17 cnsup=0; 18 cnlow=0; 19 cdiff=0; 20 int i=0; 21 while(t[i]!='\0'){ 22 if(s[i]==t[i]){ //小文字大文字もすべて一致 23 cnt++; 24 }else if(isupper(s[i])){ //s[i]が大文字で 25 if(islower(t[i])){ //t[i]が小文字の時 26 printf("s[%d]が大文字でt[%d]が大文字のとき\n",i,i); 27 char isi=tolower(s[i]); 28 if(isi==t[i]){ //s[i]を小文字に変換して一致したらOK 29 cnsup++; 30 } 31 } 32 }else if(islower(s[i])){ //s[i]が小文字でt[i]が大文字の時 33 if(isupper(t[i])){ 34 printf("s[%d]が小文字でt[%d]が大文字の時\n",i,i); 35 char isl=toupper(s[i]); 36 if(isl==t[i]){ //s[i]が大文字変換して一致したらOK 37 cnlow++; 38 } 39 } 40 }else{ //もはや文字が違う時 41 printf("もはや全部違う\n"); 42 char isi=tolower(s[i]); //小文字 43 char isl=toupper(s[i]); //大文字 44 45 if(isi!=t[i] || isl!=t[i]) cdiff++; //小文字を大文字に変換しても大文字を小文字に変換しても一致しないとき 46 } 47 i++; 48 } 49 printf("一致cnt= %d 大文字小文字cnsup= %d 小文字大文字cnlow= %d 違うcdiff= %d \n",cnt,cnsup,cnlow,cdiff); 50 if(cnt==6){ //\0を含めて一致している 51 printf("same\n"); 52 }else if(cdiff>0){ 53 printf("differnt\n"); 54 }else if(cnsup>0||cnlow>0){ 55 printf("case-insensitive\n"); 56 } 57 58 return 0; 59}
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/16 02:14