1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6291

文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/10 15:09:25)


課題で入力した文字列が漢字or英語or数字だけなら1を返す。
以外がまじっていたら0を返す処理をやりたいんです。。。
終わらなきゃ夏休みには入れないょ
SJISのコードとかもよく分からなくて本当に困っています。
分かる方がいたら教えてください。お願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列が漢字、英数なら1を返す処理 6292 shu 2006/08/10 15:30:29
<子記事> Re:文字列が漢字、英数なら1を返す処理 6293 たかぎ 2006/08/10 18:40:28
<子記事> Re:文字列が漢字、英数なら1を返す処理 6294 acid 2006/08/11 09:54:49


No.6292

Re:文字列が漢字、英数なら1を返す処理
投稿者---shu(2006/08/10 15:30:29)


まずは、どんな場合にも1を返す、
もしくは、どんな場合にも0を返すプログラムを作る。

漢字or英語or数字だけという、
具体的な入力パターンがわからないのでなんとも言えない。


この投稿にコメントする

削除パスワード

No.6293

Re:文字列が漢字、英数なら1を返す処理
投稿者---たかぎ(2006/08/10 18:40:28)
http://takagi.in/


>課題で入力した文字列が漢字or英語or数字だけなら1を返す。

もう一度仕様をよく確認した方がよいと思います。
今のままでは夏休みに入れる可能性は限りなくゼロに近いはずです。

一番困難なのは「英語」の部分です。「英字」ではなく「英語」ですから、辞書を持たせて、それが「ドイツ語」でも「フランス語」でも「イタリア語」でもなく、「英語」であることを判定する必要があるからです。



この投稿にコメントする

削除パスワード

No.6295

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 09:58:15)


英語というのは言い方に誤りがありました。
ローマ字の大文字小文字です。
if(Box[English]<'A'||(Box[English]>'Z'&& Box[English]<'a')||Box[English]>'z')←こんなのを使うんだと勝手に思っています。
処理の流れとしては入力した文字列が漢字、ローマ字、数字ならば次の文字を見て記号など漢字、ローマ字、数字以外を発見したらその時点で処理を抜けるというものです。混じっていなければ最後の文字まで見ていき最初に戻りたいんです。漢字の場合はSJISコードというのを使ってやるように言われました。1文字が2文字分なんですよね?
私にはとても難しくてどなたか解る方いたら教えてください。
お願いします。



この投稿にコメントする

削除パスワード

No.6300

Re:文字列が漢字、英数なら1を返す処理
投稿者---επιστημη(2006/08/11 11:12:44)


>処理の流れとしては入力した文字列が漢字、ローマ字、数字ならば次の文字を見て記号など漢字、ローマ字、数字以外を発見したらその時点で処理を抜けるというものです。

for ( 与えられた文字列から順に1byteずつ取り出し ) {
 - それが'0'〜'9'ならOK,次に進む
 - それが'a'〜'z'ならOK,次に進む
 - それが'A'〜'Z'ならOK,次に進む
 - それが0x81〜0x9Fまたは0xE0〜0xFCなら漢字第1バイト。
  さらにその次の文字が0x40〜0x7Eまたは0x80〜0xFCなら漢字第2バイトならOK,次に進む
 - 上記以外の文字はNG,判定終了。
}
ここにたどり着けたなら文字列を構成する文字すべてOK.判定終了。



この投稿にコメントする

削除パスワード

No.6304

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 11:24:46)


言いたいことが分かってもらえてよかったです。
すごく参考になりました。
ありがとうございます。
やってみます。
出来たら報告させてもらいますね。


この投稿にコメントする

削除パスワード

No.6305

Re:文字列が漢字、英数なら1を返す処理
投稿者---たかぎ(2006/08/11 11:41:27)
http://takagi.in/


> - それが0x81〜0x9Fまたは0xE0〜0xFCなら漢字第1バイト。
>  さらにその次の文字が0x40〜0x7Eまたは0x80〜0xFCなら漢字第2バイトならOK,次に進む

一応指摘しておくと、上記の範囲には、全角の数字やローマ字、全角のひらがな・カタカナ、全角スペースや句読点や記号、そしてキリル文字やギリシャ文字といったものも含まれています。
漢字だけを抜き出すには、もっと範囲を絞り込む必要があります。それに、全角の数字は数字とみなすのか、ローマ数字や丸付き数字は数字なのか(この場合は機種依存なので、環境を調べて分岐する必要あり)、2バイトの半角ローマ字はローマ字なのか(これも機種依存)、といったことを考慮する必要があります。




この投稿にコメントする

削除パスワード

No.6306

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 16:29:32)


一応成功かは謎ですけど参考にしてやってみました。
ありがとうございます。。。
#include <stdafx.h>
#include <stdio.h>


int isKanjiAlNum( unsigned char *str );

int _tmain()
{
int rc;

rc = isKanjiAlNum( (unsigned char *) "koko" );

if( rc == 1 ){
printf("だめでした\n");
}

}

//処理の流れとしては入力した文字列が漢字、ローマ字、数字ならば次の文字を見て記号など漢字、
//ローマ字、数字以外を発見したらその時点で処理を抜けるというものです。

//( 与えられた文字列から順に1byteずつ取り出し ) {
//- それが'0'〜'9'ならOK,次に進む
//- それが'a'〜'z'ならOK,次に進む
//- それが'A'〜'Z'ならOK,次に進む
//- それが0x81〜0x9Fまたは0xE0〜0xFCなら漢字第1バイト。
//さらにその次の文字が0x40〜0x7Eまたは0x80〜0xFCなら漢字第2バイトならOK,次に進む
//- 上記以外の文字はNG,判定終了。
//}
//ここにたどり着けたなら文字列を構成する文字すべてOK.判定終了。
int isKanjiAlNum( unsigned char *a )
{
int j=0;

while(a[j]!='\0'){
if(a[j]>='A'&& a[j]<='Z'|| a[j]>='a' &&a[j]<='z'){
j++;
continue;
}
if(a[j]>='0'&& a[j]<='9'){
j++;
continue;
}
if((a[j] >= 0x81 && a[j] <= 0x9F) || (a[j] >= 0xE0 && a[j] <= 0xEF )){
j++;
if(a[j]>= 0x40 && a[j] <= 0x7E || a[j] >= 0x80 && a[j] <= 0xFC){
j++;
continue;
}
else
{
// 漢字の2バイト目が一致せず
return 0;
}
}

// A-Za-z0-9漢字以外あり
return 0;
}
return 1;
}








この投稿にコメントする

削除パスワード

No.6307

Re:文字列が漢字、英数なら1を返す処理
投稿者---επιστημη(2006/08/14 10:14:36)


>一応成功かは謎ですけど参考にしてやってみました。

なにが謎なものか。

0を返すはずの文字列, 1を返すはずの文字列 をずらりと用意して
片っ端から食わせてみればえぇやないの。



この投稿にコメントする

削除パスワード

No.6294

Re:文字列が漢字、英数なら1を返す処理
投稿者---acid(2006/08/11 09:54:49)


大喜利会場はここですかww

ともかく、未来のプログラマーならそれ位調べてほしいものですが、
重要なのはやはり漢字ではなく英語(英字と解釈)数字の方ですね。
更に重要なのは半角全角の違い。
普通こういうプログラムは、全角(2バイト文字)の時に例外を返すというのが一般的です。
#2バイト文字と1バイト文字の違いを勉強するためですね

その辺りの仕様がはっきりしないとアドバイスは難しいでしょう。
参考までに文字コード表の載っているサイトを貼っておきます。
参考にしてください。
http://ash.jp/code/codetbl2.htm


この投稿にコメントする

削除パスワード

No.6296

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 10:15:47)


おはょうございます。
未来のプログラマーなんてのはいきおいで嘘に近いものが。
文字コード表見ました。ありがとうございます。
指摘してもらったところも自分じゃあまりピンとこないです。。泣
説明も下手で理解能力もなくてすんません。
きっと私がやりたいことがみなさんにうまく伝わってないですよね。

これでみなさんが呆れて放置されたら私もう頼りがない。どう説明するのが一番なんでしょう?


この投稿にコメントする

削除パスワード

No.6297

Re:文字列が漢字、英数なら1を返す処理
投稿者---iijima(2006/08/11 10:51:39)


>きっと私がやりたいことがみなさんにうまく伝わってないですよね。

やりたいことは大体分かります。
ですが、ここはあなたの代わりに課題をしてあげる場ではありません。

掲示板利用宣言のうち、
「課題の丸投げはしません。」
に違反していると感じられるので、多くの人が無視しているものと思います。

提案。
漢字(ShiftJISコード)が絡むとちょっと面倒なのでそれは後回しにして、
まずは半角英数字だけの場合について考えてはいかがでしょうか。

・文字列を入力する。
・その文字列が半角英数字だけなら1を返す、そうでなければ0を返す。

この処理を行うプログラムを書いてみてください。

それも難しければ、半角数字だけの場合でも良いです。

とにかく、ご自分でできるところまでやった成果を示し、どこが分からな
いかを明らかにしないことには、どんな説明をしたところで期待するよう
な回答は得られないと思います。

新学期まではまだ数週間あるので、1学期の総復習からはじめても間に合
うでしょう。
頑張ってください。


この投稿にコメントする

削除パスワード

No.6298

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 10:55:33)


わかりました。
では、英数だけをとりあえずやってみます。
ありがとうございます。



この投稿にコメントする

削除パスワード

No.6299

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 10:59:02)


while(b[No]!='\0'){
if(b[No]<'0'|| b[No]>'9'){ return 0;}
b++;
}
return 1;
どうでしょお:〜:



この投稿にコメントする

削除パスワード

No.6301

Re:文字列が漢字、英数なら1を返す処理
投稿者---気分屋(2006/08/11 11:14:03)


自分で考えてプログラムを組んで、実行させて
ある程度のパターンをテストした上で
「HTML変換ツール」でソースを変換した上で
投稿して質問しましょう。

今のままでは字下げはされていないし
bやNoの宣言もない状態ですし
投稿としては、マナー違反です。


この投稿にコメントする

削除パスワード

No.6302

Re:文字列が漢字、英数なら1を返す処理
投稿者---επιστημη(2006/08/11 11:14:41)


> while(b[No]!='\0'){
> if(b[No]<'0'|| b[No]>'9'){ return 0;}
> b++;
> }
> return 1;
>どうでしょお:〜:

bはナニ? Noはナニ?

# いちいち訊かんでも、コード書いて試してみればえぇやないの。



この投稿にコメントする

削除パスワード

No.6303

Re:文字列が漢字、英数なら1を返す処理
投稿者---未来のプログラマー(2006/08/11 11:22:18)


分かりました。
ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ