【第1部】C言語(K&R検証)編
0031.文字列を比較する
今項で紹介するのは、辞書的に
同じか
前か
後ろかを比較する
strcmp()関数です。
strcpy()関数同様、標準ライブラリと被ってしまうので
strcmp2()関数としています。
ソース紹介
CPPファイルに記述
#include <iostream>
#include <cstdio>
using namespace std;
/*
文字列を比較する
*/
int strcmp2(const char* s,const char* t) {
int i;
for (i = 0; s[i] == t[i]; i++) {
if (s[i] == '\0') {
return 0;
}
}
return s[i] - t[i];
}
/*
strcpy2のテスト
*/
int main()
{
int i;
if((i = strcmp2("abcde", "hello")) > 0) {
cout << "左のほうが後ろ" << endl;
}
else if (i < 0) {
cout << "右のほうが後ろ" << endl;
}
else {
cout << "同じ" << endl;
}
if ((i = strcmp2("hello", "hello")) > 0) {
cout << "左のほうが後ろ" << endl;
}
else if (i < 0) {
cout << "右のほうが後ろ" << endl;
}
else {
cout << "同じ" << endl;
}
return 0;
}
出力
K&Rでは、
ポインタ版も紹介されています。
CPPファイルに記述
/*
文字列を比較する(ポインタ版)
*/
int strcmp2(const char* s,const char* t) {
for (; *s == *t; s++,t++) {
if (*s == '\0') {
return 0;
}
}
return *s - *t;
}
このようにポインタ版のほうがすっきり書けます。
サンプル説明
有名な関数
strcmpのソースということです。こんなにシンプルだったかのかをと驚かされます。
K&Rでの記述
元になったのは
第5章:ポインタと配列に記述されています。
文字ポインタと関数の説明のところです。