複数の文字列を配列で管理したい
-
bonbo
複数の文字列を配列で管理したい
はじめまして、早速ですが質問させていただきます。
今、全角文字を配列で管理しようと思い↓のようなプログラムをまねして書いたのですが
------------------------------------------------------------------
#include <stdio.h>
#include <locale.h>
int main(){
wchar_t a[10][5];
a[2][3] = L'やさい';
a[4][0] = L'にく';
setlocale(LC_CTYPE, "JAPANESE");
printf("%lc\n",a[2][3]);
printf("%lc\n",a[4][0]);
return 0;
}
-------------------------------------------------------------------
実行結果
-------------------------------------------------------------------
や
に
------------------------------------------------------------------
と1文字目だけしか表示してくれません。
どうしたら全文字表示してくれるのでしょうか。
今、全角文字を配列で管理しようと思い↓のようなプログラムをまねして書いたのですが
------------------------------------------------------------------
#include <stdio.h>
#include <locale.h>
int main(){
wchar_t a[10][5];
a[2][3] = L'やさい';
a[4][0] = L'にく';
setlocale(LC_CTYPE, "JAPANESE");
printf("%lc\n",a[2][3]);
printf("%lc\n",a[4][0]);
return 0;
}
-------------------------------------------------------------------
実行結果
-------------------------------------------------------------------
や
に
------------------------------------------------------------------
と1文字目だけしか表示してくれません。
どうしたら全文字表示してくれるのでしょうか。
Re: 複数の文字列を配列で管理したい
%lc を %ls に変えてみてください。
Re: 複数の文字列を配列で管理したい
文字列じゃなくて文字を代入しているようにしか見えませんけど。
あと'複数文字'は処理系依存だったと思います。
あと'複数文字'は処理系依存だったと思います。
-
bonbo
Re: 複数の文字列を配列で管理したい
>h2so5さん
ありがとうございます。
やってみたところ
「ハンドルされていない例外が発生しました」
とエラーが出てできませんでした…
ありがとうございます。
やってみたところ
「ハンドルされていない例外が発生しました」
とエラーが出てできませんでした…
-
bonbo
Re: 複数の文字列を配列で管理したい
>ISLeさん
ありがとうございます。
すみません、文章のことを文字列だと勘違いしています。
つまり、そもそもこの形式では
やさい
にく
と表示させるのは不可能ということでしょうか…
ありがとうございます。
すみません、文章のことを文字列だと勘違いしています。
つまり、そもそもこの形式では
やさい
にく
と表示させるのは不可能ということでしょうか…
Re: 複数の文字列を配列で管理したい
Visual Studio なら標準でユニコードに対応しているので
のように可能です。
printfはマルチバイト文字列用なので使えませんが上記のプログラムのようにwprintfを使ってください。
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
setlocale(LC_CTYPE, "japanese");
wchar_t* str = L"C言語なんでも質問掲示板";
wprintf(L"%s\n", str );
}printfはマルチバイト文字列用なので使えませんが上記のプログラムのようにwprintfを使ってください。
最後に編集したユーザー naohiro19 on 2012年6月15日(金) 23:54 [ 編集 2 回目 ]
Re: 複数の文字列を配列で管理したい
文字と文字列は区別してください。bonbo さんが書きました:すみません、文章のことを文字列だと勘違いしています。
やさい
にく
と表示させるのに文字だけを使う方法と文字列を使う方法があります。
wchar_tは文字なので一文字しか表現できません。
文字列は文字の配列です。
printfで文字列を表示するなら終端文字が必要です。
-
bonbo
Re: 複数の文字列を配列で管理したい
>naohiro19さん
ありがとうございます。
それを応用して配列を使った管理にしたかったのですが
どこを改変していいのか教えて頂けないでしょうか…
------------------------------------------
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
setlocale(LC_CTYPE, "japanese");
wchar_t* str[10][10] = L"やさい";
wprintf(L"%s\n", str[10][10] );
}
--------------------------------------------------------
こんな風に改変してみたのですがエラーでした…
>ISLeさん
ありがとうございます。
wchar_tを使う限りでは不可能なんですね…
文字列のほうがよくわからないのですが具体的にどうすれば…
ありがとうございます。
それを応用して配列を使った管理にしたかったのですが
どこを改変していいのか教えて頂けないでしょうか…
------------------------------------------
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
setlocale(LC_CTYPE, "japanese");
wchar_t* str[10][10] = L"やさい";
wprintf(L"%s\n", str[10][10] );
}
--------------------------------------------------------
こんな風に改変してみたのですがエラーでした…
>ISLeさん
ありがとうございます。
wchar_tを使う限りでは不可能なんですね…
文字列のほうがよくわからないのですが具体的にどうすれば…
Re: 複数の文字列を配列で管理したい
違いますよ。bonbo さんが書きました:wchar_tを使う限りでは不可能なんですね…
文字列のほうがよくわからないのですが具体的にどうすれば…
wchar_t a[10][5];
という宣言に対して
a[2][3]やa[4][0]がwchar_t型なので一文字しか代入できないのです。
そのとおりの結果を確認していますよね。
Re: 複数の文字列を配列で管理したい
文字と文字列の区別ができていればcharでもwchar_tでも同じなんですが。
区別できていないならまず基本から勉強してください。
区別できていないならまず基本から勉強してください。
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void) {
wchar_t a[10][5];
setlocale(LC_CTYPE, "japanese");
/* 一文字ずつ代入 */
a[2][0] = L'や';
a[2][1] = L'さ';
a[2][2] = L'い';
a[2][3] = L'\0';
a[4][0] = L'に';
a[4][1] = L'く';
a[4][2] = L'\0';
printf("%ls\n",a[2]);
printf("%ls\n",a[4]);
/* 文字列を複写 */
wcscpy(a[3], L"やさい");
wcscpy(a[5], L"にく");
printf("%ls\n",a[3]);
printf("%ls\n",a[5]);
return 0;
}
-
へにっくす
Re: 複数の文字列を配列で管理したい
当たり前。
たとえば と宣言したなら、str[0]~str[9]までしか使えないから。
配列の添え字について理解できてますか?
それに代入の仕方を間違えています。 上の1行目は、 でも でも可能です。
-
bonbo
Re: 複数の文字列を配列で管理したい
返信が遅くなりました。
みなさんありがとうございます。
文字の扱いをあいまいにしたまま次に進もうとしたのが甘かったのですね…
>ISLeさん
なるほど、一文字ずつ三次配列にして使えば可能だが、
ただやっぱり文章そのものを数字のように扱って%sに代入して出力するような機能は
無いのですね…
>へにっくすさん
ああ!
wchar_t* str[10];
これは宣言だったんですね!なんてとんちんかんなことを…
やってみたらできましたー!!!
ありがとうございます!
一応できたプログラムを張っておきます。何かおかしいところあったらまたよろしくお願いします。
-----------------------------------------------
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
int a;
setlocale(LC_CTYPE, "japanese");
wchar_t* str[] ={
L"代入したい0番目",
L"代入したい1番目",
};
wprintf(L"代入したい0番目=%s\n", str[0]);
wprintf(L"代入したい1番目=%s\n", str[1]);
scanf("%d",&a);
}
------------------------------------------------------------------
平面管理はまたエラーでしたが、一応知りたかったことが解決したので解決としておきます。
みなさんどうもありがとうございました。
みなさんありがとうございます。
文字の扱いをあいまいにしたまま次に進もうとしたのが甘かったのですね…
>ISLeさん
なるほど、一文字ずつ三次配列にして使えば可能だが、
ただやっぱり文章そのものを数字のように扱って%sに代入して出力するような機能は
無いのですね…
>へにっくすさん
ああ!
wchar_t* str[10];
これは宣言だったんですね!なんてとんちんかんなことを…
やってみたらできましたー!!!
ありがとうございます!
一応できたプログラムを張っておきます。何かおかしいところあったらまたよろしくお願いします。
-----------------------------------------------
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
int a;
setlocale(LC_CTYPE, "japanese");
wchar_t* str[] ={
L"代入したい0番目",
L"代入したい1番目",
};
wprintf(L"代入したい0番目=%s\n", str[0]);
wprintf(L"代入したい1番目=%s\n", str[1]);
scanf("%d",&a);
}
------------------------------------------------------------------
平面管理はまたエラーでしたが、一応知りたかったことが解決したので解決としておきます。
みなさんどうもありがとうございました。
-
bonbo
Re: 複数の文字列を配列で管理したい
平面管理のほうも成功しました!!
ありがとうございます!
---------------------------------------------------------------
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
setlocale(LC_CTYPE, "japanese");
wchar_t* str[2][2] ={
{L"にく", L"やさい" },
{L"ミート", L"ベジタブル" },
};
wprintf(L"代入したい0番目=%s\n", str[0][0]);
wprintf(L"代入したい1番目=%s\n", str[1][1]);
}
ありがとうございます!
---------------------------------------------------------------
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int main(){
setlocale(LC_CTYPE, "japanese");
wchar_t* str[2][2] ={
{L"にく", L"やさい" },
{L"ミート", L"ベジタブル" },
};
wprintf(L"代入したい0番目=%s\n", str[0][0]);
wprintf(L"代入したい1番目=%s\n", str[1][1]);
}