
OS: Linux Ubuntu
言語: C++
引数でchar*型の文字列配列(マルチバイト含む)を受け取り
指定した幅で枠つきで文字列を出力したいのですがうまくいきません。
作りたい出力
━━━━━━━
┃1: あいうえお┃
┃2: かきく ┃
┃3: abc ┃
━━━━━━━
- str[] = {"あいうえお", "かきく", "abc"}
- あいうえおの後ろは空白なし
- 他は空白と文字列を合計してあいうえおと同じ長さに合うように
私の環境では日本語は3byteと認識され
strlen("あいうえお") = 15
となります。
イメージでは
for (i = 0; i < strlen(str[])の最大値; i++) {
cout << "┃" << i << ":" << setw(15) << left << str[i] << "┃"
}
のようなコードになると思うのですが
日本語一文字が出力上は2byte分の幅に見えるのに
認識としては3byteになってしまうので空白が1byte多くなり
━━━━━━━
┃1: あいうえお┃
┃2: かきく ┃
┃3: abc ┃
━━━━━━━
のようにずれてしまいます。
(表記上、最初の枠もずれていますが
現状は足りない分を埋めるsetfillが余計に働いてしまうということです。)
何か対策はありますでしょうか?
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
> Unicodeで作成していました。
> Shift-JISだと確かに2byteで問題なくできました。
ならばUTF-8だったのでしょう。
UTF-16なら全角/半角によらず2byteですし、strlenは誤動作しますから。
> ただ、フォントに依存しないような結果画面にしたいのですが
> 端末の文字コードをプログラム実行に強制変更などということはできますか?
フォントと文字コードは別物です。
Shift-JISに変換したのち長さを返す関数をひとつ用意すればいいかと。
No.5
- 回答日時:
>意図としては結果画面が環境依存したくないということです。
環境依存にしたくないということであれば「等幅フォント」前提というのは環境依存ではないでしょうか。
>端末の文字コードをプログラム実行に強制変更などということはできますか?
できません。
No.4
- 回答日時:

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名の一部削除について
-
VBからID3タグをいじる方法
-
アクセス ステータスバーの文...
-
TextFieldParserの固定長桁数を...
-
EXCELのVBAでLenB関数について
-
HEX
-
エンコード・デコードの仕方
-
クリスタルレポートで文字列の...
-
SQLを発行とは?クエリの作成と...
-
『列名 '担当者CD' があいま...
-
AccessからExcelへエクスポート...
-
DataGridViewに複数テーブルの...
-
VBA 変数名に変数を使用したい。
-
Excel複数シートをaccessへ一括...
-
クリスタルレポート(8.5)の書式...
-
ACCESSのレコード転送について
-
VB6.0 String型→Long型変換方法...
-
Accessのフィールド名に半角括...
-
Redim とEraseの違いは?
-
VB6のメモリ解放に関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
CString型 全角半角を意識せず...
-
TextFieldParserの固定長桁数を...
-
ファイル名の一部削除について
-
一番右のスペース以降の文字列...
-
機種依存文字と特殊文字について
-
StrConvでUnicodeに変換出来な...
-
アクセス ステータスバーの文...
-
セル内の文字を分ける
-
VBからID3タグをいじる方法
-
エクセルで13,410円を数値の134...
-
VBE上の文字検索で「パターン文...
-
VB6.0 文字列のファイル書...
-
文字列から、null値を除去する方法
-
「シフトJIS X 0213」形式の文...
-
HEX
-
エンコード・デコードの仕方
-
【Excel VBA】セル内テキストの...
-
VBAにおける正規表現について教...
-
VBA 変数に使う文字などについて
おすすめ情報