• ベストアンサー

C言語の問題が解けません!

僕は、C言語を勉強しているのですがこの問題の答えがわかりません。 どうか教えてください。 回答お願いします。 ・問題・ 10文字以内の2つの英単語を入力し、アルファベット順で最初にくる単語を表示するプログラムを作りなさい。 /プログラム/ #include<stdio.h> #include<string.h> int main(void) { char str1[256],str2[256]; int i; printf("文字列1は?"); printf("文字列2は?"); return 0; }

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

  • ベストアンサー
回答No.5

こんな感じ? 他人が書いたプログラムでもそれをみるだけで勉強になると思うので、書いておきます。 まぁ、コンパイルも何もしていないのでコンパイルできるかというところから無保証ですが。 #include<stdio.h> #include<string.h> int main(void) { char str1[256],str2[256]; int i; printf("文字列1は?"); fgets(str1, sizeof(str1), stdin); printf("文字列2は?"); fgets(str2, sizeof(str2), stdin); if (strcmp(str1, str2) > 0) printf("%s", str1); else printf("%s", str2); return 0; } あと、よほどTAや教官が間抜けでない限りは授業で出した問題をこういうところで聞いていないか調べているものですよ。

jugemuno
質問者

お礼

回答ありがとうございました。 これからは、自分で解決できるよう勉強していきたいと思います。

その他の回答 (4)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.4

># 1文字目だけの比較でいいってことでしょうかねぇ。 ちょいと正しくなかったっす。 1文字目が同じ。って場合もあるので、そういう場合は2文字を比較…というように処理していく必要がありましたな。

jugemuno
質問者

お礼

回答ありがとうございました。

回答No.3

No.2です。 不正解です。 getcharの戻り値はint型となります。 もう少しC言語の基礎をしっかりと身につけたほうが良いと思いますよ。 参考URL : http://www1.cts.ne.jp/~clab/hsample/IO/IO14.html

jugemuno
質問者

お礼

回答ありがとうございました。 もう一度基礎を覚え直したいと思います。

回答No.2

回答するまえに私から問題を出しましょう。 キーボードから1文字入力し、画面に表示するプログラムを作成してみてください。

jugemuno
質問者

お礼

#include<stdio.h> int main(void) { char a; a=getchar(); putchar(a); return 0; } 上のプログラムで大丈夫ですか。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

丸投げっぷりがすばらしいですねぇ…。 >10文字以内の2つの英単語を で、 >char str1[256],str2[256]; は、無駄が多いような気もしますが。 # 不足するよりはマシですけどね。 んで、標準入力からの文字列入力については習っていないのでしょうか? scanf()とか定番ですけど。 というか独学なんですか? # 授業で習っていない…というのであれば、出題者に質問しましょう。 # 授業サボっていたのなら潔く単位を落とすか、友達を頼りましょう。(昼メシ1回くらいかな) >アルファベット順で最初にくる単語を表示する って、どういう基準なんですかね? appleとorangeならapple? # 1文字目だけの比較でいいってことでしょうかねぇ。

jugemuno
質問者

お礼

回答有難うございました。

jugemuno
質問者

補足

たぶん、そういうことだと思います。

関連するQ&A

  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

  • C言語の問題で困っています。

    C言語の問題で困っています。 途中までできたのですが、この先が分かりません。 教えて頂くようお願いいたします。 【問題】 文字列の長さを求めるプログラムです。このプログラムを、入力した文字列の文字列長を求めるように変更してみましょう。  ただし、入力する文字列は半角で最大 20 文字までとし、指定された範囲外の値( 21 以上)が入力された場合は、正しい値が入力されるまで入力処理を繰り返すこと。 #include <stdio.h> int main(void) { char str[256] = "Hello"; int length, i; printf("文字列:"); scanf ("%s",str); length=0; i=0; while (str[i]!='\0') { i++; length++; } printf("\n文字列長:%d\n",length); }

  • strrchrについて【C言語】

    このプログラムのp-strの部分は具体的にはどの様な計算をしているのでしょうか?? (xx-xxというふうに) あとint c は char c としなくても良いのでしょうか?? どなたかご教授よろしくお願いいたします<(_ _)> #include <string.h> #include <stdio.h> int main(void) { char str[]= "abcdefghijklmnabcdefghijklmn", *p; int c; printf("検索文字を入力してください。"); c = getchar(); p = strrchr(str, c); if (p != NULL) { printf("%cは文字列の%d番目にあります。\n", c, p-str); printf("以降の文字列は%sです。\n", p); } else printf("%cは見つかりませんでした\n", c); return 0; } 【実行結果例】 検索文字を入力してください。d dは文字列の17番目にあります。 以降の文字列はdefghijklmnです。

  • C言語(ポインタ)について

    某参考書にて下記のような問題があって、その解答について分からないことがあります。 <問題> strcat()の独自バージョンとしてmystrcat()という関数を作成するとともに、この関数が正しく動作することを確認するための短いプログラムを作成してください。 <解答> #include <stdio.h> #include <string.h> void mystrcat(char *to, char *from); int main(void) { char str[80]; strcpy(str,"最初の部分"); mystrcat(str, " 2番目の部分"); printf(str); return 0; } void mystrcat(char *to, char *from) { /* toの最後を探す */ while(*to) to++; /* 文字列を連結する */ while(*from) *to++ = *from++; /* ヌル終端文字を付加する */ *to = '\0'; } 解答の*to++ = *from++;までは、なんとか何をしているのかは分かったのですが、最後の*to = '\0'という部分がよく分かりません。 なぜ、ヌル終端文字を付加する必要があるのでしょうか? 初歩的なことかもしれませんが、分からず困っているのでよろしくお願いします。

  • C言語の問題があと少しでわからないのですが

    学校の課題に取り組んで分からないことろが出てきました。問題は以下のものです。 問題13 任意の文字列を(str)を入力して、削除文字を入力させ、strから削除文字を削除して表示しなさい。 出力例:str = abcd 削除文字:c →結果:abd というものです。 途中まで自分で考え ------------------------------------------------------------------------------------------------------------------- #include <stdio.h> void rmv(char *str, char c); int main(void) { char str[80]; int c; printf("文字列入力 : "); fgets(str, 80, stdin); printf("削除文字入力 : "); c = getchar(); void rmv(str, (char)c); printf("削除後文字列 : %s", str); return 0; } void rmv(char *str, char c) { while(*str) { if(*str == c) { while(*str) { *str = *(str + 1); ++str; } } ++str; } *str = '\0'; } --------------------------------------------------------------------------------------------------------- としましたが削除文字判定と文字つめのループ用に同じポインタを使っているので文字が一文字しか消えないと言われました。 解決方法にrmv関数内で別のポインタを用意し、if文内でコピー(例 p =str;)し次のwhile文内でこのポインタを用いて判定するというヒントを貰いましたが。自分で組んでいて上手く動きません。 どのように処理をしていけばいいでしょうか。 超初心者なので説明も付けていただくと有難いです。

  • C言語 ポインタ エラー

    文字列を入力後改行して入力した文字列を出力したいのですが、エラーがでます。 ハンドルされない例外が 0xFEFEFEFE (helloworld.exe) で発生しました: 0xC00001A5: 無効な例外ハンドラー ルーチンが検出されました。 (パラメーター: 0x00000003)。 調べてみましたが、理解できません 何卒よろしくお願いします。 #include <stdio.h> void put_string(const char *str) { while (*str) putchar(*str++); } int main(void) { char str[100]; printf("文字列を入力してください"); scanf_s("%s", str); put_string(str); putchar('\n'); return(0); }

  • C言語の穴埋め問題です

    次のプログラムは、初期化により文字列を定義し、辞書式配列にしたとき、どの文字列が先頭にくるかを調べるプログラムなのですが。■■■を教えてください #include <stdio.h> #include <string.h> #define N 5 //関数のプロトタイプ宣言 char *min(char *p[] , int n); int main(void) { char *p[N] = {"Hello" , "Hi" , "Happy" , "HaHaHa" , "Heaven"}; printf("辞書式配列で先頭となる文字列は%s\n" , ■■■); } char *min(char *p[] , int n) { int min; //最小値のアドレス Int i; //カウンタ min = 0; for(i = 1; i < n; i++){ if (strcmp(■■■ , ■■■) > 0){ ■■■= ■■■; } } return ■■■; }

  • C言語

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。考えたのですが、分かりません。(コンパイルエラーです。)教えてください。宜しくお願いします。#include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

  • C言語、スキャン集合について

    下記のプログラムはスキャン集合を使って入力された文字列の先頭に 並んでいる数字を読み込んで捨て、その後に続く文字列を読み込んで 表示するものです。 #include <stdio.h> int main(void) { char str[80]; printf("数字に続けて文字列を入力してください\n"); scanf("%*[0-9]%s", str); printf("%s", str); return 0; } 【質問】%*[0-9] を %[^0-9] に置き換えてコンパイルして実行すると、 意味不明の文字列が出力されるのはなぜでしょうか? 置き換えても同じ結果になる気がするのですが…

  • C言語に詳しい方お願い致しいます

    文字列Aから文字列Bを除いた結果を表示するプログラムなのですが 一ヶ所分からない部分があります。 #include <stdio.h> #include <string.h> int main(void){  char str1[] = "abcdefg";  char str2[] = "cde";  char str3[128] = "";  char *p1 = str1, *p2;  size_t len;  len = strlen(str2);  while((p2 = strstr(p1,str2)) != NULL) {   strncat(str3,p1,p2 - p1);   p1 = p2 + len;   printf("----\n");   printf("p2=%s\n", p2);   printf("str3=%s\n", str3);   printf("p1=%s\n", p1);  }  strcat(str3,p1);  printf("%s\n",str3);  return 0; } while文中の p1 = p2 + len; なのですが、何故これでp1の内容が「fg」になるのでしょう。

専門家に質問してみよう