0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

strcmp関数を使って2つの文字列を辞書順でどちらが早い順番か判定する方法

Posted at

注意

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関数を使えると思ってたから同じように書いても使えなかったからなんで書いてあるか理解できていなかった。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?