今日のプログラミング2
昨日配列を勉強して組んでみたプログラミング。
入力したアルファベットを右に1字ずらします 例 HAL→IBM

#include

int main(void)
{
 char str[100];
 int i;

 printf("文字列を入力してください。\n");
 scanf("%s",str);

 for(i=0; str[i] !='\0'; i++){
    if(str[i] == 'z'){
      str[i] = 'a'-1;
    }

    if(str[i] == 'Z'){
      str[i] = 'A'-1;
    }

 str[i] = str[i]+1;
 }

 printf("%sに置き換えました。",str);

 return 0;
}


/*プログラム綺麗にタブで整えてたんですが、書きこんだ瞬間ずれちゃいました。見辛いかもしれませんね。*/

一応うまくいったけどこれでいいのかな?
if文のくだりがないと、z→[ になっちゃうんですよね。
ただこのやりかたって強引なのかな?もっとスマートにできるのかなと思いました。


今日は配列と関数を使ったプログラムを作りました。
難しくて、いまいち理解していないなって痛感しました。もらったサンプルプログラムに似ているのがあったのでなんとか作れたのですが…。
次は分割コンパイル?だったかな。ちょっと毛色の違いそうなプログラミングなのでできるか不安です。
[PR]
by akito_621 | 2012-04-24 21:59 | Comments(2)
Commented by れんと at 2012-04-24 23:49 x
基本的には大丈夫です。
文字の範囲の制限(if文)については、どういう仕様かによって変わりますが、今回はアルファベット(a-z, A-Z)に限定しているようなので、これでいいと思います。
欲を言えば、次のようにして、zまたはZの場合の計算を減らすことが考えられます。

if (str[i]=='z') {
str[i]= 'a';
} else if (str[i]=='Z') {
str[i]= 'A';
} else {
str[i]++;
}

あと、配列で変換テーブルを作ると、より高速な処理ができますが、使用メモリは多くなります。(主要なところを載せます)

static char conv_tbl[]= "BCDE...
:
for (...) {
if (範囲の制限をする) {
str[i]= conv_tbl[str[i]]; // 変換
}
}
:

プログラミングは、似たサンプルを見つけて来て加工して目的を達成できれば、大丈夫だと思います。重要なのは、仕様(どんな条件で、何をするかといったこと)をきちんと把握して作ることなんです。

ではでは。
Commented by akito_621 at 2012-04-26 00:32
>れんとさん
ありがとうございます。分かりやすいです。今日はif文を勉強しなおして、こうやってelseを使って書きなおした方がいいなと思ってたのですが、やはりその方がいいですね!

str[i]++ってすればよかったんですね。勉強になります。

2つ目の例も参考になります。
別のアプローチの仕方もあるんですね~。
変換テーブルという言葉を初めて知りましたw
まだまだ知るべきことが多いみたいですね。

れんとさんにそういってもらえると安心できますね。仕様を理解できるように努めます。

ありがとうございました。
<< 今日のプログラミング3 今日のプログラミング >>