プログラミング課題のヒントを教えてください

このQ&Aのポイント
  • プログラムの課題で分からない問題があるので、ヒントを教えていただきたい
  • for文、if文、配列などを応用してプログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします
  • キーボードから入力した2つの文字列(8文字以内)を比較して、同じときには○、異なるときは×と表示する方法を教えてください
回答を見る
  • ベストアンサー

プログラムの課題で分からない問題があるので、ヒントを教えていただきたい

プログラムの課題で分からない問題があるので、ヒントを教えていただきたいのです。 ちなみにfor文、if文、配列などを応用して(勿論ぜんぶ使わなくても良いです)プログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします。 ・キーボードから入力した2つの文字列(8文字以内)を比較して、同じときには○、異なるときは×と表示する int main(void) { char str[8]; int i,n,na; for (i=0;str1[i]= =str2[i];i++){ if (str1[i]= ='\0'){ n=1; }break; } というトコまでは何とか分かるのですが…

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

  • ベストアンサー
noname#140045
noname#140045
回答No.2

>配列をうまく理解してないので 逆に、配列の何がわからないのかが、疑問です。 たとえば char a[3]; と、定義すれば a[0],a[1],a[2] が存在することになります。 つまり、配列の添え字"a[添え字]"は、0から始まるのを注意する程度です。 上記、プログラムで言えば、str[8]は使用していないようです。 str1[8],str2[8]でないとコンパイルエラーとなります。 また、厳密には8文字ならば、'\0'はストッパーなので全体としては9文字分必要となります。 ですから、str1[9],str2[9]が正しいような気がします。 実際には、ケチってもしょうがないので多めに確保した方が何かと問題は少なくなります。 >どういう風に配列に代入して出力するか 何をどのように出力したいのでしょうか?

komatulong
質問者

お礼

ご回答ありがとうございます。 そうですね。よくみたら変な間違いしてました(書き間違い)。 色々してるうちに”配列”が分かってきたので、 何とか頑張ってみます。

その他の回答 (1)

回答No.1

C言語は自信ないなあ…こーかな? http://ideone.com/O80ye

komatulong
質問者

お礼

ご回答ありがとうございます。 このページは見たことない複雑なものが使ってありますね。 パッと見ても分からないです。

関連するQ&A

  • プログラムの課題で分からない問題があるので、ヒントを教えていただきたい

    プログラムの課題で分からない問題があるので、ヒントを教えていただきたいです。 ちなみにfor文、if文、配列などを応用して(勿論ぜんぶ使わなくても良いです)プログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします。 ・1~5の数字をキーボードから入力し、それに対応した英語を表示。ただし単語は配列に初期化しておくこと(※swich-caseを使わずに) ・キーボードから英語の大文字を1文字入力して、その文字がアルファベットの何文字目にあたるかを表示する ・キーボードからアルファベットの小文字を1文字入力→大文字に変換して表示する 多くてすみません。

  • プログラミングの問題なのですが、

    プログラミングの問題なのですが、 文字列[black]と[dog]を異なった2つの配列に初期化して与え、 別の配列をさらに定義、その中に1つの文字列 [blackdog]として データを代入⇒表示する(出力例: black + dog = blackdog) というプログラムはどんなのになるか教えて下さい。 ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 始めは char str1[6]={'black'}; char str2[4]={'dog'}; char str3[9]; int i, ……; という感じでお願いします。

  • プログラミングの問題で幾つか分からないことがあります。

    プログラミングの問題で幾つか分からないことがあります。 入力した文字列のアスキーコードを1上げて表示するというもので、 #include <stdio.h> int main(void){ char a[100]; int b, c; scanf("%s", a); for(b = 0; b <= 99; b++){ if(a[b] == '\n'){ break; } a[b] == a[b] + 1; } printf("%s", a); return 0; } というふうに作ったのですが、基の文字列がそのまま表示されてしまいます。 あと、文字列strの中にある文字列bagに含まれる文字と同じ文字を空白に置き換える関数を作り、文字列を与えて動かすというプログラムで、 #include <stdio.h> char str[100], bag[100]; int str_space(char str[], char bag[]){ int a, b, c, d; for(a = 0; a <= 99; a++){ if(str[a] == '\n'){ b = a; break; } } for(a = 0; a <= 99; a++){ if(bag[a] == '\n'){ c = a; break; } } for(a = 0; a <= b; a++){ for(d = 0; d <= c; d++){ if(str[a] == bag[d]){ str[a] = ' '; } } } return 0; } int main(void){ scanf("%s", str); scanf("%s", bag); str_space(str, bag); printf("%s", str); return 0; } というふうに作ったのですが、動きませんでした。 ヒントでもいいのでどなたかお教え下さい。

  • C言語の、ポインターの問題を教えて下さい

    C言語の、ポインターを使って大文字と小文字を入れ替えるプログラムを教えて下さい。 作ったのですが、うまくいかず困っています。 分かる方、訂正してください。 よろしくお願いいたします。 #include<stdio.h> void reverse(char *str) { int i; for(i=0;str[i]!='\0';i++) { if(str[i]>=0x61) {str[i]-0x20;} if(0x40<str[i]<0x5B) {str[i]+0x20;} } return(str); } int main(void) { int num; char *str="AddsssEEEEwwwJojoHoih"; printf("Before reverse %s \n",str) str=reverse(str); printf("After reverse %s \n",str); return 0; }

  • プログラム

    文字列を逆順にする関数を作ってるのですがうまくできません。 void reverse(char *str, int count=0) { int i; char *s="momonga"; s+=strlen(s); count=strlen(s); for(i=count; i<0; i--, str++, s--){ *str++=*s++; } } int main() { char s1[20]; int c; reverse(s1,c); printf("%momongaを逆順にすると%sで文字数が%dです",s1,c); return 0; } このプログラムの間違ってる所をおしえてください。

  • 入力した文字列から母音だけを出力するプログラム

    文字列を入力し母音だけを出力するプログラムを作りました。 以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、switch文のcaseを増やすと冗長になってしまう気がします。 switch文以外の方法でもっと簡潔に書く方法はありますか?ご教授お願い致します。 /* 入力した文字列のうち、母音「a,i,u,e,o」だけ出力する */ #include <stdio.h> #include <string.h> #define MAXSTR 256 int main(void) { char str[MAXSTR]; int i; gets(str); for (i = 0; i < strlen(str); i++) switch (str[i]) { case 'a': putchar(str[i]); break; case 'i': putchar(str[i]); break; case 'u': putchar(str[i]); break; case 'e': putchar(str[i]); break; case 'o': putchar(str[i]); break; } putchar('\n'); return 0; } 実行結果: What time is it now? aieiio

  • C言語の課題に取り組んでいるんですが・・・

    まだプログラムの勉強をはじめた初心者なのですが、 テキストファイルから文字を読みこみ、大文字ならば小文字に変換し辞書順に並びかえるプログラムを作っているのですがどうしてもうまくいきません。 例えばtest.txtに XXX YYY YY XX BBB aaa aa BB とあれば aa aaa bb bbb xx xxx yy yyy と表示されるよにしたいんです。 自分が作ったプログラむはこれです。 まだテキストファイルからでなくキーボードからの入力になっていますが・・・ #include<stdio.h> #include<stdlib.h> #include<string.h> #include <ctype.h> int soto( const void *x, const void *y); int main(int argc, char *argv[]){ FILE *input; char str1[1000]; int i, j; for (i = 1; i < argc; i++){ qsort(argv[i], 1000, sizeof( char *), soto); strcpy(str1, argv[i]); for(j = 0; j < 100; j++){ str1[j] = tolower( str1[j] ); } printf("%s\n", str1); } return 0; } int soto( const void *a, const void *b){ char *x, *y; x = (char*)a; y = (char*)b; return x-y; } これだと小文字にはなるんですがソートされずに表示されてしまいます・・・ どのようにすればいけるのかご指摘のほどおねがいします

  • このプログラムのどこを直せばいいんでしょうか?

    いま、文字列strの中に文字cが含まれている個数を表示するプログラムを作っているんですが、下のように作っても、上手く行きません。 どこをどう直せばいいのか教えてください! #include <stdio.h> int str_chnum (const char str[],int d) { int i=0; int sum=0; while(str[i]!=0){ if(str[i]==d ){ sum++; } i++; } return(sum); } int main(void) { int c; char str[128]; puts("put sentence..."); scanf("%s",str); puts("search character..."); scanf("%d",&c); printf("there are %d %ds in this sentence.",str_chnum(str,c),c); return(0); }

  • プログラムのことで

    次のプログラムの変数の説明と処理の流れを素人でも理解できるように説明してもらえないでしょうか。 #include <stdio.h> #define MAX 128 int str_comp(char nx[], char ny[]){ int i, j, k=0; for(i=0; i<=MAX; i++){ if( nx[i]=='\0' ){ return 0; } else if( nx[i]==ny[0] ){ for( j=0; nx[i]==ny[j]; j++ ){ i++; } if( ny[j]=='\0' ){ return 1; } } } } int main(void) { char namex[MAX}; char namey[MAX}; int n; int i; printf("文字列x(64文字まで)? "); scanf("%s",namex); printf("文字列y(64文字まで)? "); scanf("%s",namey); n=str_comp(namex,namey); if(n==1){ printf("'%s'に'%s'は含まれます\n",namex,namey); } else if(n==0){ printf("'%s'に'%s'は含まれません\n",namex,namey); } return 0; } 実効結果 文字列x(64文字まで)? Katatsumuri  文字列y(64文字まで)? ta 'Katatsumuri'に'ta'は含まれます. エラーは出ないはずです。 よろしくお願いします。

  • 二次元配列による文字列の配列の受渡しについての質問です。

    二次元配列による文字列の配列の受渡しについての質問です。 #include <stdio.h> void print_pname(char str[][5], int n) { int i, j; for (i = 0; i < n; i++) { printf("str[%d] = \"", i); for (j = 0; str[i][j] != '\0'; j++) putchar(str[i][j]); printf("\"\n"); } } int main(void) { char ary[][5] = {"Lisp", "C", "Ada"}; print_pname(ary, sizeof(ary) / sizeof(ary[0])); return 0; } 上のプログラム中の関数print_pnameの引数char str[][5]についてですが char (*str)[5](配列のポインタ)と変更した場合にwarningが多数発生します。 これはどうしてでしょうか? また、上のプログラムを配列のポインタを使って変更することは可能でしょうか? 以上、よろしくお願いします。

専門家に質問してみよう