配列とポインタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
しょしょしょしんしゃ

配列とポインタ

#1

投稿記事 by しょしょしょしんしゃ » 16年前

失礼します
宿題です C言語です 配列を使ったポインタです

条件1、文字列 char str[/url]="abCDeFgHIJ"をあらかじめ用意する。
  2、外部から1から10までの整数が入力されたときに左からN番目の文字以外をすべてzに置き換えよ。
  3、zに置き換える関数 void trans_z()とする。
  4、小文字は小文字のz、大文字は大文字のZと置き換える。
  5、1から10までの整数以外が入力された場合は入力のやり直しを要求する。

このような条件です。
条件2,3,4が、配列をどのように組み合わせるのか分かりません。
特に条件2は、入力された値だけで、Zに置き換わる仕組みが理解できません。
考えてみたんですけど、実行結果が違います。
途中までなのですが、付け加える部分と消したほうがいい部分はあるのでしょうか?

//printf
 #include<stdio.h>
#include<ctype.h>

int main(void)
{
char str[/url]="abCDeFgHIJ";
char i;

printf("1から10の数字を選びなさい\n");
scanf("%d",&i);
for(i=str;i!='\0';i++){
if(i==){
break ;
}
}
printf("%s\n",i);
return 0;
}
//printf 0  
   よろしくお願いします。

kazuoni

Re:配列とポインタ

#2

投稿記事 by kazuoni » 16年前

上のコードは消すモノがないと思うのですが^^;
scanf以下で何をしようとしているのかまったく分かりません。
if文は特に。。

2~4
関数trans_z()の引数に、配列strのn-1番目のアドレスを取ります。
関数trans_z()では、NULLになるまでZ代入するようにします。
その際、tolower(),toupper()を活用し、大文字Z小文字zを分けてください。(ctype.hをインクルードしてますし)

こんな手順で一度考えてみてください。

初心者

Re:配列とポインタ

#3

投稿記事 by 初心者 » 16年前

これでいいに決まってるでしょっ!


#include <stdio.h>
#include <ctype.h>

void trans_z(char *str, int n)
{
    int i;
    
    for (i = 0; i < 10; ++i) {
        if (i != n - 1) {
            if (isupper(str)) {
                str = 'Z';
            }
            else if (islower(str)) {
                str = 'z';
            }
        }
    }
}

int main(void)
{
    char str[/url] = "abCDeFgHIJ";
    int n;
    
    printf("早く1から10までの整数を入力しなさいよっ > ");
    scanf("%d", &n);
    while (n < 1 || 10 < n) {
        printf("も~、何やってんの! 1から10までだって言ってるでしょっ!\n");
        printf("早く1から10までの整数を入力しなさいよっ > ");
        scanf("%d", &n);
    }
    
    printf("置き換える前はこうよっ、ふん!:\"%s\"\n", str);
    trans_z(str, n);
    printf("置き換えた後はこうよっ、ふん!:\"%s\"\n", str);
    return 0;
}

non

Re:配列とポインタ

#4

投稿記事 by non » 16年前

>for(i=str;i!='\0';i++){
>if(i==){
>break ;

strとiの意味(違い)をよく理解してください。
iは添え字とかINDEXとか言って、配列の何番目かをあらわすための番号です。
アパートで言えば、部屋番号です。strはi番目の中身ってことです。アパートならi号室に
住んでいる人とかですね。
strとだけ書くと、str[0]のアドレス、すなわち一番最初の部屋の住所(○○市○○町○○番地○○アパート)です。
i=str だと、住所を部屋番号に入れているのでおかしいですね。
i!='\0' だと '\0'は数値の0ですから、iが0号室でない間ということで、これも変です。

for(i=0;str!='\0';i++)
なら意味が通ります。 (i++は++iと書くのをこの掲示板の人達は推奨しています)
iを0号室から始めて、i号室の住民が住んでいない部屋まで、iを1つずつ増やして行くということ。

たぶんポインタは習っていないと思いますので
void trans_z(char *str, int n) は
void trans_z(char str[/url], int n) でいいです。

しょしょしょしんしゃ

Re:配列とポインタ

#5

投稿記事 by しょしょしょしんしゃ » 16年前

おそうなりました。
ご丁寧な質問に感謝します。

kazuoni

Re:配列とポインタ

#6

投稿記事 by kazuoni » 16年前

やそさんがツンデレスケジュール管理を作成してから妙に流行ってきましたねw
(といってもまだ二つ目ですが・・・^^;)
自分もこの流れに乗ってみようかなぁ・・・w

>ご丁寧な質問に感謝します。
・・・?

管理人

Re:配列とポインタ

#7

投稿記事 by 管理人 » 16年前

なんだこのツンデレサンプルは^^;

やそ

Re:配列とポインタ

#8

投稿記事 by やそ » 16年前

管理人さんはデレデレだからなぁ(笑)

次はどんなジャンルで攻めようか?(笑)

閉鎖

“C言語何でも質問掲示板” へ戻る