C 文字列操作 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(文字列比較)
(文字列比較)
493行: 493行:
 
さいしょから、文字列比較とは、こういうものだと知っておけば、それでいいのですから、ネガティブに考えず、<br />
 
さいしょから、文字列比較とは、こういうものだと知っておけば、それでいいのですから、ネガティブに考えず、<br />
 
これを覚えれば、潰しが効くとポジティブにとらえてやっていきましょう。<br />
 
これを覚えれば、潰しが効くとポジティブにとらえてやっていきましょう。<br />
 +
比較は英語でcompairと表現するため、関数名にはcmpが使われます。半導体製造工程のcmpとは違います。Chemical Micro Polisherだっけ?<br />
 
<br />
 
<br />
 
例によって比較の関数もマルチバイト文字、ワイド文字、マルチバイト2バイト文字対応といろいろな関数があります。<br />
 
例によって比較の関数もマルチバイト文字、ワイド文字、マルチバイト2バイト文字対応といろいろな関数があります。<br />
704行: 705行:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
と、こんな感じです。結果を見るとわかるのですが、1,-1,0で結果が表現され、先頭から比較して、一番最初に異なる文字同志を比較したときの結果、<br />
 +
文字コードの値が大きかったか小さかったかで、1と-1とに結果が分かれます。これを使って昇順に並べたりすることも出来ます。<br />
 +
もちろん0が返ってきたときは、完全一致です。等しかったということになります。<br />
 +
少し変わっているのは、関数によっては、文字コードの差分値を返すものもあるという点です。<br />
 +
_mbs系では文字コードの差分を返すことは無いようです。cmpの前にiが付く関数は差分を返すようです。ただし_mbsnicmpや_mbsicmpのような関数は<br />
 +
差分は返しません。wcs系の関数は差分を返します。このことで差分が数値コードによる部分である場合は、その差は数字の差でもあり、一文字(一桁)の<br />
 +
数学的な差を計算するのと同様の処理になったり、アルファベットによる連番と考えた場合でも、その差を計算していることにもなります。<br />
 +
2バイト文字では差が大きな数値になりますが、符号付きint型で十分に収まる値です。今回は実験的にlongを使いましたが、無駄足でした。<br />
 +
仕様のとおりに動作しますね。<br />
 +
但し、差分の件については、仕様に明記されていませんので、実際に利用する関数での動作を確かめてから使う方が良いと思います。<br />
 +
仕様に明記されているのは0より大きい値を返すか小さい値を返すかのどちらかとなっています。<br />
 +
正確なVisual C++に限らない言語仕様を検索してみたのですが、わかりませんでした。<br />
  
 
=='''文字列一致'''==
 
=='''文字列一致'''==

2013年12月3日 (火) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス