文字列の検索

string-search.png
関数 見つからない場合 見つかった場合
c++ string.find("探したい文字") string::npos 位置をsize_tで返す
string.compare(pos,len,"探したい文") 0じゃない数 0
Java String.indexof("探したい文字列") -1 位置をintで返す

文字列を探す(完全一致)

ヘッダの読み飛ばしにも使えるかな。

strstr()関数を使う

#include <stdio.h>
#include <string.h>
void main(){
    char* sentence="\"Nurses run!\" says sick Cissy as nurses run.";
    char* search="Cissy";
    char* pos=strstr(sentence,search);
    printf("%s\n",sentence);
    printf("serach begin with:%s\n",search);
    printf("found at: %s\n",pos);
}

"Nurses run!" says sick Cissy as nurses run.
serach begin with:Cissy
found at: Cissy as nurses run.

検索したい文字列、も含んだ文字を返してくれる。
失敗したらNULLが返ってくる

文字列を探す(部分一致)

strpbrk()
見つかった場所のポインタ=strpbrk(検索対象文字列,検索文字列);

ある文字で始まる文字列を探す

左側検索
strchr()関数を使う。

最初にあったとこのポインタ=strchr(検索対象文字列,探したい頭文字)

#include <stdio.h>
#include <string.h>
void main(){
    char* sentence="the quick brown fox jumps over the lazy dog";
    char search='f';
    char* pos=strchr(sentence,search);
    printf("%s\n",sentence);
    printf("serach begin with:%c\n",search);
    printf("found at: %s\n",pos);
}

出力結果

the quick brown fox jumps over the lazy dog
serach begin with:f
found at: fox jumps over the lazy dog

右側検索
strrchr()を使う。使い方はstrchrと同じ。

#include <stdio.h>
#include <string.h>
void main(){
    char* sentence="Borrow or rob?";
    char search='o';
    char* pos=strrchr(sentence,search);
    printf("%s\n",sentence);
    printf("serach begin with:%c\n",search);
    printf("found at: %s\n",pos);
}

Borrow or rob?
serach begin with:o
found at: ob?

この文字のうちどれかを含むかどうか判定する

#include <iostream>
 
using namespace std;
 
int main() {
 
    char c = 'a';
 
    if (~string("aeiou").find(c))
        cout << "vowel" << endl;
    else
        cout << "consonant" << endl;
 
    return 0;
}

string-manipulate

サポートサイト Wikidot.com string-manipulate