C++サンプル集

【第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章:ポインタと配列に記述されています。文字ポインタと関数の説明のところです。