文字列strの変換規則についての質問

このQ&Aのポイント
  • 文字列strをアルファベットや数字に従って変換する関数を作成する方法について教えてください。
  • 例えば、英字ならばそのすぐ前の英字に変換し、数字ならばその直後の数字に変換するという変換規則がある文字列strを扱う関数について教えてください。
  • 具体的な例として、文字列strが「gifu University, Dept. of Information Engineering, 2008」の場合、正しい変換後の文字列は「hjgv Tmhudqrhsx, Cdos. ne Hmenqlzshnm Dmfhmddqhmf, 3119」となります。
回答を見る
  • ベストアンサー

わかりません・・・。

文字列strを次の規則により変換して表示する関数 str_crypt( char str[] ) {......} を作成するというC言語の問題がわかりません・・・。 教えてください。 <変換規則> 英字ならばアルファベットでそのすぐ前の英字に(ただしAはZに,aはzに)、 数字ならばその直後の数字に(ただし9は0に)、 特殊文字はそのまま。 例 変換前:gifu University, Dept. of Information Engineering, 2008 変換後:hjgv Tmhudqrhsx, Cdos. ne Hmenqlzshnm Dmfhmddqhmf, 3119

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6287)
回答No.1

str_crypt関数に渡している引数strが > 変換前:gifu University, Dept. of Information Engineering, 2008 これに対応していることはわかりますか? strから1文字ずつ取り出して、英字・数字・それ以外の判定はできますか?

dokaben1
質問者

補足

どうやって、英字と数字他を判定すればいいのでしょうか?? ifを使うんですよね??

その他の回答 (5)

回答No.6

いろんなやり方があると思いますが、僕なら変換前と変換後のテーブルを作ります。。 char henkan[2][]= {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "1234567890ZABCDEFGHIJKLMNOPQRSTUVWXYzabcdefghijklmnopqrstuvwxy"};

  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

文字コードが不明なので char u_alpha[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A'}; for (i = 26; i > 0; i--) { if (*str == u_alpha[i]) { *str = u_alpha[i - 1]; break; } } このような処理を小文字と数字(数字は逆方向)でもやればいいでしょう

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

処理系の指定が内容なので... A~Z, a~zの値が連続しているとは限らない点が、ある意味で引っ掛け問題ですね。

  • asuncion
  • ベストアンサー率33% (2126/6287)
回答No.3

> どうやって、英字と数字他を判定すればいいのでしょうか?? スペシャル・ヒント。 is何とか、という標準関数(複数あります)について調べてみてください。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>どうやって、英字と数字他を判定すればいいのでしょうか?? そのものズバリの標準関数があるので探しましょう。

関連するQ&A

  • n進法の変換

    数字の0~9および英字のA~Z(OおよびIをのぞく)の34文字を使用した34進法の4桁の数字を10進法への変換方法、およびその逆(10進法→34進法)の変換方法をエクセルの計算式またはマクロを使用し作成する方法を教えてください。

  • 計算機言語(C言語)の課題です。

    ポインタstrが文字列の先頭文字を指している時、その文字列に含まれる英小文字を英大文字に変換する関数 void str_toupper(char *str) を作成しなさい。ただし、英小文字a~zおよび英大文字A~Zには、それぞれ昇順に、連続した1バイトの整数が割り当てられているものとする。例えば、aには10進数の97、zには10進数の122が割り当てられ、Aには10進数の65、Zには10進数の90が割り当てられるといった具合である。

  • 文字列は大文字のまま、UTF-8エンコードの英字だけ小文字にしたい

    下記の方法でUTF-8エンコードをしたときに、 コードの英字が大文字になってしまい困っています。 use Encode; $str = "HOGEホゲ" $str =~ s/(\W)/'%' . unpack("H2", $1)/eg; print "$str"; 現状のエンコード後)HOGE%E3%83%9B%E3%82%B2 希望のエンコード後)HOGE%e3%83%9b%e3%82%b2 半角英数字(HOGE)は大文字のままで、 エンコードだけを小文字で書き出す簡単な方法はありますでしょうか。 (小文字でないと受け付けてくれないサイトに飛ばしたいため) 現状は正規表現でAからZまで26行繰り返しています。 $str =~s/\%([A-Z0-9]{1})?A/%$1a/g; ~ $str =~s/\%([A-Z0-9]{1})?Z/%$1z/g; よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • プログラム

    文字列str内のすべての英字を大文字に変換する関数および小文字に変換する関数void str_toupper(char *str)    void str_tolower(char *str) を作成したいのですが、検討つかなくて困っています、、 表示例としては、 文字列を入力:asDFgH 大文字:ASDFGH 小文字:asdfgh

  • C言語:小文字を大文字に変換する関数を作成

    C言語超初心者です。学校の課題で次のような問題が出されました。 ・問題・ 次に挙げる縛りに沿い、以下の関数とメイン関数を作り、処理結果を画面に作成しなさい。 char *tst(char *str) ・strの中の文字列も小文字を大文字に変換し、変換した文字列が格納されているchar *に返す。 ・引数strの中の文字列は受け取った状態で手を加えない。 ・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。 ・malloc関数を使用する。 ---------------------------------------------------------------------------------- 大文字に変換するには while(*str != '\0') { if(*str >= 'a' && *str <= 'z') { *str -= 'a'- 'A'; } ++str; } というのは分かったのですがここから何をすするか全く分かりません。初心者なのでなるべく分かりやすく教えてもらえると有難いです。 お願いします。

  • キー入力制限について

    OS:windows2000pro VB:VB6.0sp5 テキストボックス(オブジェクト名:text1)に下記文字以外は 入力不可にする方法(プログラム)を教えてください 初歩的なご質問かと存じますがよろしくお願いいたします 英字:A~Z(大文字) 英字:a~z(小文字) 数字:0,1,2,3,4,5,6,7,8,9 記号:-(ハイフン),_(アンダーバー)

  • Excel 入力した文字を数字に変換する命令

    Excelに文字を打ち込み、規則に従って数字に変換するようなことはできないでしょうか。 例えば、aと入力したら1、bと入力したら2に変換するといったことはできないでしょうか。 教えて下さい

  • 途中にある一文字を削除したい

    英字と数字のセルがあります。 そこから特定の英字をひとつだけ削除したいのです。 例 ABCD12345 → ABC12345 AMDD29384 → AMD29384 ERKGD45096E → ERKG45096E となるようにです。Dの文字をひとつ削除します。 数字の並びも変則です。英字はだいたい3~6文字ぐらい、数字は6桁ぐらいで、数字の後に英字が1文字ついてるものもあります。 1000行ぐらいあります。 簡単に変換できる方法がありましたら教えてください。 よろしくお願いします。 自分が考えたのは、LFET関数で英字の文字を表示し、LEN関数でその文字数を数え(これは行を分別しやすいように)、REPLACE関数で何文字目を指定し、その指定文字(この場合はD)を空白に変換し、置換で空白をなしにするものです。

  • トリッププログラム!?

    7桁の数字が,A~Z・a~z・0~9で構成された9桁の文字列になるとき,3103364はどうなるでしょうか。 3181008は0c8DgWWOz,3854944は0eJ9w3vyzになります。 お願いします! 【参考】(トリッププログラム) $tripkey = "#istrip"; #文字列 $tripkey = substr($tripkey,1); $salt = substr($tripkey.'H.',1,2); $salt =~ s/^.-z/./go; $salt =~ tr/:;<=>?@\^_`/ABCDEFGabcdef/; $trip = crypt($tripkey,$salt); $trip = substr($trip,-9); $trip = '◆'.$trip; print "$trip";

    • ベストアンサー
    • Perl
  • cryptの動作

    cryptがサーバーによって動作が異なるというのはありうるでしょうか。 cryptが使えないサーバーがあるというのは聞いたことがあるのですが、 if(!&decry("abcd" ,$in{'pass'})){print "不正";} のときに$in{'pass'}に何も入ってない(つまり"")のときになぜか&decryの返り値が1になるサーバーがあるようなのです。しかもおかしなことに、$in{'pass'}になんらかの文字が入っていると"不正"という文字がでるそうなのです。(しかし「abcd」の暗号化文字列がくると不正とは表示されない) しかし私の環境(WinXP【phpdev4 + Active Perl】 と @nifty)では、そんなことはありません。$in{'pass'}=""; でもちゃんと不正と出ます。 私が使っている暗号化と、照会の処理の関数は以下の通りです。 ********************************************** sub encry { srand(); @salts = ( "A".."Z", "a".."z", "0".."9", ".", "/" ); $salt = $salts[int(rand(64))] . $salts[int(rand(64))]; return crypt($_[0], $salt); } sub decry { return($_[1] eq crypt($_[0], $_[1])); } ***********************************************

    • ベストアンサー
    • Perl

専門家に質問してみよう