C/400

19. 覚えておきたいC/400で最も使用する LOOKUP とは?

C/400に限ったことではないが文字や文字列の検索は頻繁に使用する。
ここではIBM解説書には載っていない便利で頻繁に使用されるテクニックを紹介しよう。
次の例では「MY PERLSONAL COMPUTER」という文字列の中で文字列「SON」が出現する位置を
探している例である。

0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>                   
0003.00 #include <string.h>                   
0004.00                                             
0005.00 #define TRUE         0                      
0006.00 #define FALSE       -1                      
0007.00                                             
0008.00 void main(void){                            
0009.00     char str[] = "MY PERSONAL COMPUTER";    
0010.00     char* ptr;                              
0011.00     int pos;                                
0012.00                                             
0013.00     ptr = strstr(str, "SON");               
0014.00     if(ptr != NULL){                        
0015.00        pos = (int)(ptr - str);              
0016.00        printf("FOUND AT %d\n", pos);        
0017.00     }                                       
0018.00     getchar();                              
0019.00 }

注目して欲しいのは ptr という作業用のポインタを用意しておけば

pos = (int)(ptr - str)

によってその出現した位置を取得できることである。
この手法は C/400の中では頻繁に使用するので是非、覚えておいて頂きたい。
また、探索文字が1バイトだけの場合は

ptr = strchr(str, 'A');

のようにすれば良い。

さらに実用レベルでは最初から探すのではなく検索の位置を指定したい場合も発生する。
そのようなときは

ptrs = strstr(&str[pos], "SON");

というように記述すればよい。
上記の

ptr = strstr(str, "SON");

str = strstr(&str[0], "SON");

と全く同じことである。