• 締切済み

あと少しなんですが・・・

入力: This is a pen. 入力文字列:[ This is a pen. ] 出力文字列;[ pen. a is This ] ――――――――――――――――――― 上に示したように単語の順番をさかさまにして表示するプログラムを作りました。しかし、今のプログラムでは、最初に空白が来たり、空白が連続すると正しく表示できません。どこを修正すればいいのか教えてください。 -------------------------- #include <stdio.h> #define BUF 1024 void out(int,char); int main(void){ char in[BUF]; /* 入力された文字列を保存する */ char out[BUF]; /* inoput の内容を単語逆順にして保存する*/ int wordcount; /* 文字カウント */ char *in_ptr,*out_ptr; /* それぞれの文字列の文字をさすポインタ */ int i,j,a,b; /* 繰り返し用カウンタ */ /* メッセージの表示+文字列の入力 */ printf("入力: "); fgets(in, sizeof(in), stdin); /* ポインタの初期化 */ in_ptr = in; out_ptr = out; /* 単語数の初期化 */ wordcount = 0; /* 単語数を数える作業 */ while(*in_ptr != '\n'){ if(*in_ptr!=' '&&(*(in_ptr+1)==' '||*(in_ptr+1)=='\n')){ wordcount++; } in_ptr++; } /* メッセージの表示+単語数の表示 */ printf("\n文字数のカウント開始\n"); printf("文字数のカウント終了: %d単語\n",wordcount); printf("\n入力文字列:[ %s ]\n", in); printf("出力文字列;[ "); /* 単語逆順処理作業 */ b=0; for(a=0;a<wordcount;a++){ j=0; b++; in_ptr = in; for(i=0;i<(wordcount-b);i++){ while(*in_ptr!=' '){ j++; in_ptr++; } in_ptr++; } /* ポインタを単語の頭に持っていく */ in_ptr= in + (j+(wordcount-b)); /* inをoutにコピー */ while(*in_ptr!='\0' && *in_ptr!=' ' && *in_ptr!='\n'){ *out_ptr = *in_ptr; in_ptr++; out_ptr++; } if(*in_ptr==' '||*in_ptr=='\n'||*in_ptr=='\0'){ *out_ptr = ' '; out_ptr++; } } printf("%s]\n",out); return 0; }

  • --ll
  • お礼率12% (1/8)

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★回答者No.2です。 ・前回のアドバイスをソースにしてみました。  参考にして下さい。 #include <ctype.h> #include <stdio.h> #include <string.h> #define BUFF_SIZE 1024 #define WORD_SIZE 100 // メイン関数 int main( void ) {  char *word[ WORD_SIZE ];  char in[ BUFF_SIZE ];  char out[ BUFF_SIZE ];  char *pi = in;  char *po = out;  int n, pos;    // 入力  printf( "入力:" );  fgets( in, sizeof(in), stdin );  *strchr(in,'\n') = '\0';  // 簡単改行除去(*)    // (1)単語の先頭をポインタ配列にセット  for ( pos = 0 ; ; pos++ ){   if ( pos >= WORD_SIZE ){    printf( "単語の数が多すぎます。\n" );    return 1;   }   while ( isspace(*pi) ){  // 空白文字を読み飛ばし    pi++;   }   if ( (*pi == '.') || (*pi == '\0') ){    break;   }   word[ pos ] = pi;   // 単語の先頭を記憶      while ( isalpha(*pi) ){  // 英字文字を読み飛ばし    pi++;   }  }  // (2)ポインタ配列の最後から順番に単語をコピー  for ( n = (pos - 1) ; n >= 0 ; n-- ){   pi = word[ n ];    // 単語の先頭を取り出す      while ( isalpha(*pi) ){  // 連続する英字文字をコピー    *po++ = *pi++;   }   *po++ = ' ';    // 間の空白文字をコピー  }  // 最後にピリオド文字を追加  po[ -1 ] = '.';  po[ 0 ] = '\0';  // 表示  printf( "入力単語数:%d\n", pos );  printf( "入力文字列:[%s]\n", in );  printf( "出力文字列:[%s]\n", out );  return 0; } 以上。

回答No.3

ソースコード読んでみました。 やっていることは、後ろの単語からout[]にコピーしているのですが、次の問題点があります: コピーする単語の位置を得る処理 in_ptr = in + (j + (wordcount - b)); ぱっと見て、jは単語の先頭位置かと思ったのですが、それでは(wordcount -b)の説明がつかない。結局、 j: 空白を除いた場合の文字の位置("this is a pen."の場合、'p'の位置を示す7) (wordcount - b): その単語に遭遇するまでに存在するであろう空白の数 空白が2個ずつある"this__is__a__pen."の場合、、(_を空白と読み替えてください) そうすると、空白が2個ずつ入っていた場合、外側のループ数は4回固定なのに対し、空白は6個です。空白を見つけるとそれで1単語のコピー処理ループを実行するため、最後まで処理を行いません。 また、空白を見つけると、その次の位置に単語が入っていると仮定してコピーを行うので、結局空白をそのまま出力してしまっています。 "this__is__a__pen."(2個ずつ空白)の出力結果は " is__this " となります。 単語の認識は"this", "", "is", ""となるため、 ・最初の空白は、""のあとに追加される空白 ・"is"と"this"の間の空白2個は、"is"の後に追加される空白と、""の後に追加される空白 ・最後の空白は、"this"のあとに追加される空白 また、out[]の最後にヌル文字を入れていないので、文字列を出力するさい、後ろにゴミが表示されることがあります。 修正といっても、半分作り直しに近いです。 ・bを削除する ・jは配列位置そのままとする ・out[]を削除する(直接出力するため、必要ない) ・in_ptr, out_ptrは削除する アルゴリズムとしては、 jを文字列の最後尾位置に設定し、後ろから前に走査していく方法です。 最後の単語位置を取得し、その単語を出力 ループ開始  次の単語位置を取得し、単語位置が0以上なら、   空白とその単語を出力  そうでなければ、   ループ脱出 ループ終了 となります。 一番最後の単語とそれ以前の単語は分けて考えなければなりません。 なぜなら、「単語が見つかったら、出力し、空白を出力する」というアルゴリズムだと、一番先頭の単語が見つかった後も空白を出してしまうからです。 "this is a pen."だと"pen. ", "a ", "is ", "this "(thisの後に空白がついてしまう)となり、最後に空白がついてしまいます。 最後の単語はそのまま出力し、その後は「空白を出力→単語を出力」だと、 "pen.", " a", " is", " this"となり、最後の空白はなくなります。 プログラムは次のようになります: j = strlen(in) - 1; j = get_next_word(j); //次の単語の先頭位置を得る print_next_word(j); //その位置の単語を出力する while (1) {  j = get_next_word(j);  if (j >=0) {   printf(" ");   print_next_word(j);  } else {   break;  } } printf("."); get_next_word()は改行文字の扱い、print_next_word()は改行、空白、ピリオドの扱いに注意が必要です。 最後に、がんばってください。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★コンパイルしてみました。 >しかし、今のプログラムでは、最初に空白が来たり、空白が連続すると正しく表示できません。  ↑  本当だ。正しく表示されないね。 >どこを修正すればいいのか教えてください。  ↑  コードを読みたくないよ。  だから新しいアルゴリズムをアドバイスします。  (1)単語の先頭をポインタの配列に代入。   (a)先頭のスペースを読み飛ばす   (b)単語の初めをポインタ配列にセット   (c)連続する英字を読み飛ばす   (d)(a)へ戻る   (e)『\0』が現れるまで繰り返す  (2)ポインタ配列の最後から順番に単語をコピー。   (a)ポインタ配列の最後から先頭に向け処理   (b)ポインタ配列の単語を別領域へコピー   (c)連続する英字をコピーしてその次に間のスペースをコピー   (d)ポインタ配列の1つ前を処理   (e)ポインタ配列の先頭を処理するまで繰り返す  (3)画面に表示。   (a)普通にprintfで表示 ・上記の新しいアルゴリズムで作り変えてみるのはどうですか?  あとスペースの読み飛ばしには isspace() 関数を使ってみるのはどう?  英字文字の判定では isalpha() 関数を使う。  でもピリオド文字はどうしましょう?  工夫して下さい。 ・以上。

noname#77845
noname#77845
回答No.1

本当に質問者さんが作ったプログラムですか? このプログラムが書けるのなら質問内容くらい分けないと思うのですが…。 課題丸投げは禁止ですよ。

--ll
質問者

補足

このプログラムは本当に自分で作りました。 なんとか作れったっていう感じです。 プログラムングのヒントがあったのでここまでは作れたのですが、質問内容に関してはヒントがなかったので、わかりませんでした。 すいませんが、教えていただけると嬉しいです。

関連するQ&A

  • 単語逆順コピープログラム

    入力された文字列を逆から表示するというプログラムを作成しているのですがなかなかうまくいきません。僕の作成したプログラムを載せておくので間違いの指摘をお願いします。 出力例(一部) 入力文字列:[ pen. a is This ] 出力文字列:[This is a pen.] ---------コードここから--------- #include <stdio.h> #include <string.h> /* マクロの定義 */ #define BUF 1024 int main(void){ char in[BUF]; /* 入力された文字列を保存する */ char out[BUF]; /* input の内容を単語逆順にして保存する */ int wordcount = 0; /* 単語数 */ char *in_ptr, *out_ptr; /* それぞれの文字列の文字を指すポインタ */ int wsp[128], wep[128]; /* 単語の先頭の添え字と単語末の添え字を保存する配列 */ int i, j; printf("入力された英単語列を単語逆順にします\n"); printf("入力:"); fgets(in, sizeof(in), stdin); sscanf(in, "%c", &in); /* \nを\0に書き換える */ in_ptr = in + strlen(in) - 1; *in_ptr = '\0'; /* 単語数カウント */ printf("文字数のカウント開始\n"); in_ptr = in; if(*in_ptr != ' '){ wordcount++; } for(in_ptr = in; *in_ptr != '\0'; in_ptr++){ if(*in_ptr != ' ' && *(in_ptr - 1) == ' '){ wordcount++; } } printf("文字数のカウント終了: %d単語\n", wordcount); printf("\n単語逆順処理開始\n"); for(i = 0; i < wordcount; i++){ for(in_ptr = in; *in_ptr != '\0'; in_ptr++){ if(*in_ptr != ' ' && *(in_ptr - 1) == ' '){ wsp[i] = *in_ptr; } if((*in_ptr - 1) != ' ' && (*in_ptr == ' ' || *in_ptr == '\0')){ wep[i] = *in_ptr; } } } out_ptr = out; for(i = wordcount - 1; i <= 0; i--){ for(*in_ptr = wsp[i]; *in_ptr <= wep[i]; in_ptr++){ *out_ptr = *in_ptr; out_ptr++; } } printf("単語逆順処理終了\n"); printf("\n入力文字列:[%s]\n", in); printf("出力文字列:[%s]", out); return 0; } ---------コードここまで---------

  • ポインタについて

    #include<stdio.h> int main(void) { char str[10]; char *ptr = str; printf("文字列を入力してください。\n"); scanf("%s",ptr); printf("文字列は%sです。",str); return 0; } 上記のプログラムのscanf("%s",ptr);の ptrに&をつけるとなぜ先頭の4文字は入力しても 表示されなくなってしまうのでしょうか? よろしくお願いします。

  • java

    Base64にエンコードしたものをデコードするプログラムです。(汎用性が低いのは仕様です)コンパイルは通ったのですが、実行したら以下のエラーが出てきました。 C:\Users\Owner\Documents\javadev>java Base64Decode2 hello.dat hello2.txt java.lang.ArrayIndexOutOfBoundsException: 97 at Base64Decode2.decode(Base64Decode2.java:51) at Base64Decode2.main(Base64Decode2.java:23) 指定の行を見ても原因がよく分かりません。とても初歩的な質問なのかもしれませんが、お願いします。 以下がプログラムコードです import java.io.*; public class Base64Decode2 { public static void main(String[] args) { // 変換テーブル char[] table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; InputStream in = null; // 入力データ OutputStream out = null; // 出力先 try { in = new FileInputStream(args[0]); out = new FileOutputStream(args[1]); char[] cs; while ((cs=read4(in)) != null) { int[] buf = decode(cs, table);//ここが問題? for (int i=0; i<buf.length; i++) { System.out.print(buf[i]+", "); } System.out.println(); int[] buf2 = convert6to8(buf); write3(out, buf2); } } catch (Exception e) { e.printStackTrace(); // 例外の情報を表示する } finally { // in, out を閉じる try { in.close(); out.close(); } catch (Exception e) { } } } /** * 8ビットの2進数の列を復号化する. * @param cs * @param table 符号テーブル * @return */ public static int[] decode(char[] cs, char[] table) { int[] buf = new int[cs.length]; for (int i=0; i<buf.length; i++) { buf[i] = table[cs[i]];//ここが問題? } return buf; } public static int[] convert6to8(int[] buf) { String b; int[] buf2; if (buf.length == 2) { b = toBinary(buf[0], 6); buf2 = new int[1]; buf2[0] = fromBinary(b.substring(0, 8)); } else if (buf.length == 3) { b = toBinary(buf[0], 6) + toBinary(buf[1], 6); buf2 = new int[2]; buf2[0] = fromBinary(b.substring(0, 8)); buf2[1] = fromBinary(b.substring(8, 16)); } else { b = toBinary(buf[0], 6) + toBinary(buf[1], 6) + toBinary(buf[2], 6); buf2 = new int[3]; buf2[0] = fromBinary(b.substring(0, 8)); buf2[1] = fromBinary(b.substring(8, 16)); buf2[2] = fromBinary(b.substring(16, 24)); } return buf2; } /** * バイト列 bt の数を順に出力する. * @param bt 数の配列。長さは 3以下. 各数は8ビットの整数 */ public static void write3(OutputStream out, int[] bt) throws IOException { for (int i=0; i<3; i++) { if (i<bt.length) { out.write(bt[i]); } } } /** * in から文字を最大4つ読み出す. * @param in 入力ストリーム * @return 文字の配列。配列長は最大4. 入力終了したときには null を返す. */ public static char[] read4(InputStream in) throws IOException { char[] bs; int n0=in.read(); int n1=in.read(); int n2=in.read(); int n3=in.read(); if (n0 < 0) { // 読み込み終了 bs = null; } else if (n2 < 0 || (char) n2=='=') { bs = new char[2]; bs[0] = (char) n0; bs[1] = (char) n1; } else if (n3 < 0 || (char) n3=='=') { bs = new char[3]; bs[0] = (char) n0; bs[1] = (char) n1; bs[2] = (char) n2; } else { bs = new char[4]; bs[0] = (char) n0; bs[1] = (char) n1; bs[2] = (char) n2; bs[3] = (char) n3; } return bs; } /** * 数を読み取って、nビットの2進数を表す文字列に変換する * @param bt 1バイトの数 * @param n 2進数のビット数 * @return 2進数を表す文字列 */ public static String toBinary(int bt, int n) { String s = Integer.toBinaryString(bt); for (int i=s.length(); i<n; i++) { s = "0" + s; } return s; } /** * 2進数を表す文字列を数に変換する * @param b 2進数を表す文字列 * @return b が表す数 */ public static int fromBinary(String b) { return Integer.parseInt(b, 2); } }

    • ベストアンサー
    • Java
  • 空白を含んだ文字列がうまく格納(表示)できない

    こんにちわ。 空白(スペース)の入った文字列の格納(表示)について質問させてください。 以下のプログラムを実行すると、空白の含む文字列がうまく表示されません。 例えば、 in the worldと入力しても、inしか格納されていないみたいです。それはなぜでしょうか? また、どうすればそれを格納、表示させることができるのでしょうか?教えてください。よろしくお願いいたします。 #include <stdio.h> #include <string.h> main() { char buf[BUFSIZ]; char moji[31]; int i; printf("Input string: "); fgets(buf, sizeof(buf), stdin); moji[31] = '?0'; sscanf(buf, "%s", moji); i = 0; while (moji[i] != '?0') { printf("%c",moji[i]); i = i + 1; } printf("?n"); printf("%d letters?n", i); } 【実行例】 csx01:~> gcc prog.c csx01:~> a.out Input string: in the world in 2 letters

  • 教えてください

    入力した文字列のスペースをすべて取り除く関数を返すのですが、分かりません。(例)a s d fと入力したら、asdfと表示します。途中まで考えたのですが、どうしてもできません。教えてください。宜しくお願いします。(このソースは、コンパイルエラーです。) 14: 移植性のないポインタ変換(関数a) #include <stdio.h> char a(char *st) { char *ptr=st; while(*st!='\0') { if (*st != ' ') { *ptr++=*st; } } *ptr='\0'; return(ptr); } int main(void) { char str[21]={'\0'}; int i=0; char ch; printf("文字列を入力してください:"); while(i<21) { ch=getchar(); if (ch=='\n') {break; } else if (ch != '\0' && ch != '\n') { str[i] =ch; i++; } } str[i] = '\0'; printf("%s",a(str)); return(0); }

  • 一番大きい奇数を表示する

    scanf関数を使用して、文字列を10回入力し一番大きい文字列を表示するプログラムを作ったのですが、 一番大きい「奇数」を表示するように条件を加えた場合どうすればよいのでしょうか? 偶数=割り切れる 奇数=割り切れない ということまでは分かるのですがその先が分かりません。 一応一番大きい文字列を表示するプログラムを貼っておきます。 #include <stdio.h> int main(void) { char str[1024]; char buf[10]; int i; printf("文字列を10回入力して下さい:\n"); memset(str, 0, sizeof(str)); for (i = 0; i < 10; i++) { memset(buf, 0, sizeof(buf)); printf("input>\n"); scanf("%s", buf); } if (strcmp(buf, str) > 0) { strcpy(str, buf); } printf("output>\n%s\n" , str); getchar(); }

  • 多桁 計算プログラム

    下のプログラムを (1)上位桁の不要な0を表示しない (2)3つの数を計算できるようにする (3)0が入力されるまでは入力を受け付けて加算を繰り返す プログラムに改造する方法を教えてください。 #include <stdio.h> #define MAXDIGIT 70 void reset(char*,int); void input(char*,int); void add(char*,char*,char*,int); void add_digit(char ,char ,char ,char* ,char* ); void display(char* ,char* ,char* ,int ); void lineprint(char ,char* ,int ); void linedraw(char ,int ); int main(void) { char a[MAXDIGIT],b[MAXDIGIT],c[MAXDIGIT]; reset(a,MAXDIGIT); reset(b,MAXDIGIT); reset(c,MAXDIGIT); input(a,MAXDIGIT); input(b,MAXDIGIT); add(a,b,c,MAXDIGIT); display(a,b,c,MAXDIGIT); return 0;} void reset(char* buf,int maxdigit) { int i; for(i=0;i<maxdigit;i++) buf[i]=0; return;} void input(char* buf,int maxdigit) { char str[MAXDIGIT]; int i,j; printf("input data:"); scanf("%s",str); i=0; while(str[i]!='\0') i++; j=0; while(i>0){ buf[j]=str[i-1]-'0'; j++; i--; } return;} void add(char* a,char* b,char* c,int maxdigit) { int i; char carry_in,carry_out; i=0; carry_in=0; while(i<maxdigit) { add_digit(a[i],b[i],carry_in,&c[i],&carry_out); carry_in=carry_out; i++;} return;} void add_digit(char a,char b,char carry_in,char* c,char* carry_out) { *c=(a+b+carry_in)%10; *carry_out=(a+b+carry_in)/10; return;} void display(char* a,char* b,char* c,int maxdigit) { lineprint(' ',a,maxdigit); lineprint('+',b,maxdigit); linedraw('-',maxdigit+1); lineprint(' ',c,maxdigit); return;} void lineprint(char c,char* line,int maxdigit) { int i,maxdigitlimit; maxdigitlimit=maxdigit-1; printf("%c",c); for(i=maxdigitlimit;i>=0;i--){ printf("%1d",line[i]); } printf("\n"); return;} void linedraw(char c,int length) { int i; for(i=0;i<length;i++) printf("%c",c); printf("\n"); return;}

  • C言語計算プログラム

    Cの計算プログラム 下のプログラムを (1)上位桁の不要な0を表示しない (2)3つの数を計算できるようにする (3)0が入力されるまでは入力を受け付けて加算を繰り返す プログラムに改造する方法を教えてください。 #include <stdio.h> #define MAXDIGIT 70 void reset(char*,int); void input(char*,int); void add(char*,char*,char*,int); void add_digit(char ,char ,char ,char* ,char* ); void display(char* ,char* ,char* ,int ); void lineprint(char ,char* ,int ); void linedraw(char ,int ); int main(void) { char a[MAXDIGIT],b[MAXDIGIT],c[MAXDIGIT]; reset(a,MAXDIGIT); reset(b,MAXDIGIT); reset(c,MAXDIGIT); input(a,MAXDIGIT); input(b,MAXDIGIT); add(a,b,c,MAXDIGIT); display(a,b,c,MAXDIGIT); return 0;} void reset(char* buf,int maxdigit) { int i; for(i=0;i<maxdigit;i++) buf[i]=0; return;} void input(char* buf,int maxdigit) { char str[MAXDIGIT]; int i,j; printf("input data:"); scanf("%s",str); i=0; while(str[i]!='\0') i++; j=0; while(i>0){ buf[j]=str[i-1]-'0'; j++; i--; } return;} void add(char* a,char* b,char* c,int maxdigit) { int i; char carry_in,carry_out; i=0; carry_in=0; while(i<maxdigit) { add_digit(a[i],b[i],carry_in,&c[i],&carry_out); carry_in=carry_out; i++;} return;} void add_digit(char a,char b,char carry_in,char* c,char* carry_out) { *c=(a+b+carry_in)%10; *carry_out=(a+b+carry_in)/10; return;} void display(char* a,char* b,char* c,int maxdigit) { lineprint(' ',a,maxdigit); lineprint('+',b,maxdigit); linedraw('-',maxdigit+1); lineprint(' ',c,maxdigit); return;} void lineprint(char c,char* line,int maxdigit) { int i,maxdigitlimit; maxdigitlimit=maxdigit-1; printf("%c",c); for(i=maxdigitlimit;i>=0;i--){ printf("%1d",line[i]); } printf("\n"); return;} void linedraw(char c,int length) { int i; for(i=0;i<length;i++) printf("%c",c); printf("\n"); return;}

  • fgets関数を使用したときの文字あふれについて

    fgets関数を用いて文字列を入力し、その長さを測るプログラムを作っています。 #include <stdio.h> #include <string.h> #define MAX 256 int main ( int, char *[] ); int main ( argc, argv ) int argc; char *argv[]; { char buf[( MAX )]; while ( 1 ){ memset ( buf, 0, sizeof( buf )); fgets ( buf, MAX, stdin ); if( fgets == NULL ){ break; } printf("入力した文字列の長さは%dです\n" ,strlen( buf )); } return 0; } このプログラムでは、256までしか文字列の長さを測ることができません。 もしこのプログラムで256を超える文字列を入力してしまうと、文字のあふれが発生し、 「入力した文字列の長さは256です」 「入力した文字列の長さは(あふれた文字列の長さ)です」 とこのようになってしまいます。 このプログラムで256以上の文字を読み捨てて、 「入力した文字列の長さは(あふれた文字列の長さ)です」 を表示しないようにできるのでしょうか? また読み捨てた文字列の長さを知ることはできるのでしょうか? もしかしたらfgets関数を使用すると不可能なのではないか?と思っています。 分かる方が居ましたらどうか教えて下さい。 よろしくお願いします。

  • C言語 文字列の比較 compare

    プログラミング初心者です。 60文字以内の文字列を入力して、 大小関係を比較・表示するプログラムなのですが・・ 「AはBより大きい」という結果しか出ません。 どこが間違っているのか、ご指摘お願いしますっ。 #include<stdio.h> int main(void) { char moji1[61]; char moji2[61]; printf("文字列Aを入力===>"); scanf("%60s" ,&moji1); printf("文字列Bを入力===>"); scanf("%60s" ,&moji2); if(moji1-moji2>0){ printf("===AはBより大きい===\n"); } else if(moji1-moji2<0){ printf("===AはBより小さい===\n"); } else if(moji1-moji2==0){ printf("===AとBは等しい===\n"); } return 0; } int compare(char *x, char*y) { while(*x==*y){ if(*x=='\0') return 0; x++; y++; } return (*x-*y); }