失礼します
宿題です 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
よろしくお願いします。
配列とポインタ
Re:配列とポインタ
上のコードは消すモノがないと思うのですが^^;
scanf以下で何をしようとしているのかまったく分かりません。
if文は特に。。
2~4
関数trans_z()の引数に、配列strのn-1番目のアドレスを取ります。
関数trans_z()では、NULLになるまでZ代入するようにします。
その際、tolower(),toupper()を活用し、大文字Z小文字zを分けてください。(ctype.hをインクルードしてますし)
こんな手順で一度考えてみてください。
scanf以下で何をしようとしているのかまったく分かりません。
if文は特に。。
2~4
関数trans_z()の引数に、配列strのn-1番目のアドレスを取ります。
関数trans_z()では、NULLになるまでZ代入するようにします。
その際、tolower(),toupper()を活用し、大文字Z小文字zを分けてください。(ctype.hをインクルードしてますし)
こんな手順で一度考えてみてください。
Re:配列とポインタ
これでいいに決まってるでしょっ! #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; }
Re:配列とポインタ
>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) でいいです。
>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:配列とポインタ
やそさんがツンデレスケジュール管理を作成してから妙に流行ってきましたねw
(といってもまだ二つ目ですが・・・^^;)
自分もこの流れに乗ってみようかなぁ・・・w
>ご丁寧な質問に感謝します。
・・・?
(といってもまだ二つ目ですが・・・^^;)
自分もこの流れに乗ってみようかなぁ・・・w
>ご丁寧な質問に感謝します。
・・・?