mbed & MicroPython / 文字列Aが文字列Bに含まれているかどうかを調べる函数AinB(A, B)

単純法

#include "MicroBit.h"
MicroBit uBit;

uint8_t AinB(ManagedString A, ManagedString B){
    int ALen   = A.length();
    int BLen   = B.length();
    int difLen = BLen - ALen;
    
    // 文字列Bを左(i)から文字列Aの文字数ぶん(ALen)ずつ順番に見ていって、
    uint8_t isFound = 0;
    for(int i=0; i<=difLen; i++){
        if(A==B.substring(i, ALen)){
            isFound = 1;
            break;
        }
    }
    // 文字列Aが見つかったら1を返し、
    // 最後まで見つからなかったら0を返す。
    return isFound ? 1 : 0;
}

//////////
// test //
//////////
int main(void){
    printf("%d\n", AinB("OK", "OK"));               // 1
    printf("%d\n", AinB("OK", "KO"));               // 0
    printf("%d\n", AinB("OK", "OreookdadaktetfK")); // 0
    printf("%d\n", AinB("OK", "OKedafdfadfadftr")); // 1
    printf("%d\n", AinB("OK", "treookdaOKdaktet")); // 1
    printf("%d\n", AinB("OK", "treookdadaktetOK")); // 1
    printf("%d\n", AinB("OK", "KreookdadaktetdO")); // 0
    printf("%d\n", AinB("KOeookdadaktetdO", "OK")); // 0

    release_fiber();
    return 0;
}

実行結果:
f:id:ti-nspire:20180713075741p:plain

strstr()函数を使う方法(string.hのインクルードは不要)

//#include<string.h>
#include "MicroBit.h"
MicroBit uBit;

uint8_t AinB(char A[], char B[]){
    return strstr(B, A)!=NULL ? 1 : 0;
}

//////////
// test //
//////////
int main(void){
    printf("%d\n", AinB("OK", "OK"));               // 1
    printf("%d\n", AinB("OK", "KO"));               // 0
    printf("%d\n", AinB("OK", "OreookdadaktetfK")); // 0
    printf("%d\n", AinB("OK", "OKedafdfadfadftr")); // 1
    printf("%d\n", AinB("OK", "treookdaOKdaktet")); // 1
    printf("%d\n", AinB("OK", "treookdadaktetOK")); // 1
    printf("%d\n", AinB("OK", "KreookdadaktetdO")); // 0
    printf("%d\n", AinB("KOeookdadaktetdO", "OK")); // 0
    
    release_fiber();
    return 0;
}

実行結果:
f:id:ti-nspire:20180713075836p:plain

Pythonの場合

inだけでよい。

from microbit import *

def AinB(A, B):
    return A in B 

########
# test #
########
if __name__ == "__main__":
    print(AinB("OK", "OK"))               # 1
    print(AinB("OK", "KO"))               # 0
    print(AinB("OK", "OreookdadaktetfK")) # 0
    print(AinB("OK", "OKedafdfadfadftr")) # 1
    print(AinB("OK", "treookdaOKdaktet")) # 1
    print(AinB("OK", "treookdadaktetOK")) # 1
    print(AinB("OK", "KreookdadaktetdO")) # 0
    print(AinB("KOeookdadaktetdO", "OK")) # 0

実行結果:
f:id:ti-nspire:20180713094840p:plain