全角半角混じりの文字列を1文字ずつ表示する記述について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
wasawasa
記事: 94
登録日時: 11年前

全角半角混じりの文字列を1文字ずつ表示する記述について

#1

投稿記事 by wasawasa » 11年前

文字列の文字を1文字ずつ全角か半角かを判定する記述について調べている途中に下記の「全角半角混じりの文字列を1文字ずつ表示する」旨の記述を拾ったのですが、これについて分からない所があったので質問させて頂きます。
この記述の中の「_mbclen((BYTE*)p)」が文字列pの先頭の文字のビット数を取得する記述、「tmp[x]=*(p++)」がp[0]をtmp[x]に格納する記述だとするなら、whileループの中のどこかで文字列pの全ての文字を一つずつ前にずらす操作が必要だと思うのですが、一体何処でその操作を行っているのでしょうか?

もし「tmp[x]=*(p++)」の記述だけでp[0]をtmp[x]に格納する操作と文字列pの全ての文字を一つずつ前にずらす操作が含まれているのなら、どの部分が「p[0]をtmp[x]に格納する操作」で、どの部分が「文字列pの全ての文字を一つずつ前にずらす操作」なのかを教えて頂けないでしょうか?

記述文

コード:

char *Str="あいabcうえお";
char *p=Str;
char tmp[3];
while(*p!='\0'){
    switch(_mbclen((BYTE*)p)){
    case 1:
        tmp[0]=*(p++);
        tmp[1]='\0';
        break;
    case 2:
        tmp[0]=*(p++);
        tmp[1]=*(p++);
        tmp[2]='\0';
        break;
    default:
        //error
        break;
    }
    printf("%s\n",tmp);
}
引用先:http://takabosoft.com/20011222183310.html

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 全角半角混じりの文字列を1文字ずつ表示する記述について

#2

投稿記事 by みけCAT » 11年前

wasawasa さんが書きました:この記述の中の「_mbclen((BYTE*)p)」が文字列pの先頭の文字のビット数を取得する記述、「tmp[x]=*(p++)」がp[0]をtmp[x]に格納する記述だとするなら、whileループの中のどこかで文字列pの全ての文字を一つずつ前にずらす操作が必要だと思うのですが、一体何処でその操作を行っているのでしょうか?
「文字列pの全ての文字を一つずつ前にずらす操作」は必要ありません。
tmp[x]=*(p++)という文を1回実行すると、まずp[0]の値がtmp[x]に格納され、その後p=p+1となるので、
次にtmp[x]=*(p++)を実行するときには、最初のtmp[x]=*(p++)を実行する前のp[1]の値がtmp[x]に代入されます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

wasawasa
記事: 94
登録日時: 11年前

Re: 全角半角混じりの文字列を1文字ずつ表示する記述について

#3

投稿記事 by wasawasa » 11年前

>みけCATさん
大変分かりやすい説明ありがとうございます。お陰で理解できました。

閉鎖

“C言語何でも質問掲示板” へ戻る