注意
AtCoderのabc217_A - Lexicographic Orderのネタバレあり。
ACしたコード
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[11];
char t[11];
scanf("%s %s", s, t);
if (strcmp(s, t) < 0){
printf("Yes\n");
} else {
printf("No\n");
}
return (0);
}
わからなかったこと
①strcmp関数の引数に文字列を入れて、第一引数が第二引数より辞書順で早いと負の整数を返す。第二引数の方が早い場合は、正の数を返す事。
②以下の条件式は、sがtよりも辞書順で前であるかどうか判定する事、
if(strcmp(s, t) < 0)
chatGDP
Q. if (strcmp(S, T) < 0) { この部分が辞書順になる仕組みを教えてください。
A. strcmp関数は、2つの文字列を辞書順で比較し、その大小関係を整数で返します。
辞書順とは、単語の並び順を表す方法の1つで、辞書の単語の並び方に基づいています。2つの文字列を辞書順で比較する場合、まず最初の文字から比較を始め、2つの文字が異なる場合はその大小関係を決定します。もし同じ場合は次の文字を比較します。一方がもう文字がなくなった場合は、残りの文字列がもう片方の文字列よりも小さいと判定されます。たとえば、"abc"と"abde"を辞書順で比較する場合、最初の"a"は同じなので、次の文字"b"を比較します。"abc"の次の文字は"c"ですが、"abde"の次の文字は"d"ですので、"abc"は"abde"よりも小さいと判定されます。
したがって、 strcmp(S, T)はSとTを辞書順で比較し、SがTより小さい場合には負の整数、SがTより大きい場合には正の整数、SとTが同じ場合には0を返します。このため、 strcmp(S, T) < 0 という条件式は、SがTよりも辞書順で前であるかどうかを判定しています。
③strcmp manの書式の部分がプロトタイプ宣言を書いていることがわかった。
今までは書式の通りに書けばstrcmp関数を使えると思ってたから同じように書いても使えなかったからなんで書いてあるか理解できていなかった。