大まかな仕様は
・与えられた任意の文字列を任意の速度で1文字ずつ表示する。
・リターンキーを押すと枠いっぱいになるまで文字を1文字ずつ速度MAXで表示していく。
・文字列を全て表示してしまったらリターンキーの入力待ち。
というものです。
1文字ずつ表示するということでとりあえず文字は全角文字だけに的を絞って作りました。
全角だけならば↑の条件を満たし、動きました。
しかし、半角と全角文字が混じっていても対応できるようにしたいのですが躓いてしまったので質問させていただきます。
まず以下に変更したい場所のプログラムソースを一部載せます。
/* talkContents[/url] -> 与えられた会話文字列 talkStr[/url][/url] -> 1行ずつ表示するために分解した文字列 i -> 行No j -> 文字の要素No(現在は全角対象なので2つのNoで1文字) pointer -> 与えられた文字列の抜き出す文字を指し示す */ talkStr[j ] = talkContents[pointer ]; // 与えられた全角文字列を、 talkStr[j+1] = talkContents[pointer+1]; // 全角1文字ずつコピーして talkStr[j+2] = '\0'; // そこまでを文字列とする if(strcmp(&talkStr[j],"。") == 0){ // "。"を読み込んだら次の行へ i++; j=0; } else j+=2; pointer+=2;
↑のソースでは全角しか対応できません。
質問内容:半角にも対応するためにはどうすれば良いでしょうか?
最初考えた物としてコピーしようとする文字の上位バイト(ここではtalkContents[pointe[/url])を調べ、半角文字の場合の処理を作ってしまえば良いと思い、シフトJIS(http://charset.7jp.net/sjis.html)より
if(talkContents[pointe[/url] >= 0x00 && talkContents[pointe[/url] < 0x7e){
/* 処理 */
}
という処理を以下の二つの命令の間に追記しましたが、結果は上手くいきませんでした。
/**********************************************
talkStr[j ] = talkContents[pointer ];
// ここに追記し、以下を場合分けして対応させた。
talkStr[j+1] = talkContents[pointer+1];
**********************************************/