文字列の中から特定の文字列を検索し、何文字目にターゲットがあるかを表示するプログラムを書きました。
strstr関数の繰り返しとしてwhile文を用いようと思い書いてみましたが、ポインタ変数の初期化と干渉してしまい、
一度も繰り返し処理に入ることができず、処理が終了しました。
そこで以下のコードでは繰り返し文として、do Whileを用いていますが、do whileは条件が後に来るため可読性の意味で、避けたいので、 別の方法で繰り返し処理を行いたいです。
ご査収の程よろしくお願いいたします。
コード
#include <iostream> #include <string> int main() { char chArray[] = "aabaabbaab"; char chStringTarget[] = "ab"; char *pStartAdress; // 検索開始する位置のアドレス格納用 char *pFindTargetAdress; // パターンの存在する位置のアドレス用 int nPositionTarget = 0; // テキストの先頭アドレスをtextの先頭にセット pStartAdress = chArray; // strstrを繰り返し実行 do { pFindTargetAdress = strstr( pStartAdress, chStringTarget ); if( pFindTargetAdress != NULL ){ // patternが存在する位置のアドレスと、何文字目にあるかを表示 nPositionTarget = pFindTargetAdress - chArray; printf( "%sはアドレス:%p、%d文字目に存在します。\n", chStringTarget, pFindTargetAdress, nPositionTarget + 1 ); // ターゲットを見つけた位置の次の文字を、検索再開文字とする。 pStartAdress = pFindTargetAdress + 1; } } while( pFindTargetAdress != NULL ); return 0; }
どうでもいいけど、「ご査収」ってこういうときに使う言葉じゃないと思う。
回答2件
あなたの回答
tips
プレビュー