質問: VS2019 C++ には、SSE命令を使用した strstr(char*, char*) が用意されていますが、 英字大文字小文字を同一視する strcasestr(char*, char*) が用意されていません。 これはなぜでしょうか? 英字大文字小文字を同一視するSSE命令が無いのでしょうか? ある論文にはそのような命令も用意されていると書いてあったのですが、それは間違いなのでしょうか? それともなにかの理由があるのでしょうか? ご教授のほど、よろしくおねがいします。
回答: > > それともなにかの理由があるのでしょうか? > > > はい、`strcasestr`の動作は、**ロケールに依存します**。たとえばトルコ語では、`I`の小文字は`i`ではなく`ı`であり、`i`に対応する大文字の`İ`が別に存在します(UTF-8で表現すればバイト数すら変わってしまいます)。 機械的に`if (’A’ <= c && c <= ’Z’) { c += ’a’-’A’; }`とやっては正しい結果が得られません。