• 締切済み

文字列の比較

文字列の比較の仕方がよくわかりません。strcmpコマンドを使わずにできるだけ簡単にかく方法を教えてください。途中までは書きます。for分とかを使うんでしょうか? #include <stdio.h> int main(void) { char SpelA[] = "dog"; char SpelB[] = "dogfood" ; int long ; long = 1 ; if (long == 1) { printf("Good!\n") ; } ; return 0 ; } ;

みんなの回答

  • motipan
  • ベストアンサー率0% (0/1)
回答No.3

#include <stdio.h> int main(void) { char SpelA[] = "dog"; char SpelB[] = "dogfood"; int i; for(i = 0;SpelA[i] == SpelB[i] && i < sizeof(SpelA);i++); if (i == sizeof(SpelA))printf("Good!\n"); return 0 ; } こんな感じでしょうか(汚いソースですが…) この場合sizeof(SpelA)は4が入ってます。 『dog』の3バイトと1バイト(なにか忘れました)で4です。 つまり『dogfood』なら8です。 日本語の場合、『文字列』なら3文字*2バイトと1バイトで7です。 あと、longは予約語なんで変数には出来ません

noname#22058
noname#22058
回答No.2

#include <stdio.h> int my_strcmp(const char *s1, const char *s2); int main(void) { char SpelA[] = "dog"; char SpelB[] = "dogfood"; int n; n = my_strcmp(SpelA, SpelB); printf("%s\n", n == 0 ? "同じ長さ" : n < 0 ? "SpelAが短い" : "SpelAが長い"); return 0; } int my_strcmp(const char *s1, const char *s2) { while (*s1 == *s2) { if (*s1 == '\0') return 0; s1++; s2++; } return (unsigned char) *s1 - (unsigned char) *s2; }

  • langria
  • ベストアンサー率18% (6/33)
回答No.1

>>strcmpコマンドを使わずにできるだけ簡単にかく方法 strcmpを使わない理由はなんですか? 比較してどうしたいんですか? >>途中までは書きます。for分とかを使うんでしょうか? 書かれているものを見ると必ずGoodと出力されて終了しますが、何をどうしたいのかが見えません。

senkei777
質問者

補足

SpelA[]の内容とSpelB[]の内容が同じならGoodと表示させたいんです。たとえば2つの内容がdog=dogならGoodのように。dog=catとかなら何も表示しないように。 strcmpを使わないのはC言語の本にstrcmpを使わずに書けとかかれていたからです。必ずGoodと出力されてしまうのでそうならないような書き方を教えてほしいんです。説明不足ですみません。

関連するQ&A

  • ポインタにによる値の表現と文字列の表現について

    ◎1------------------------------ #include<stdio.h> int main(void) { char *pt="ABC"; printf("pt=%s\n",pt); char dt[10]="ABCDE"; char *pp; pp=dt; printf("pp=%s\n",pp); return 0; } -------------------------------------- ◎2---------------------------------- #include<stdio.h> int main(void) { char *pt="ABC"; printf("*pt=%s\n",*pt); char dt[10]="ABCDE"; char *pp; pp=dt; printf("*pp=%s\n",*pp); return 0; } ----------------------------------- ◎3--------------------------------------- #include<stdio.h> int main(void) { int ary[5]={111,222,333,444,-1}; int* pt=ary; while(1){ printf("%d ",*pt); ++pt; if(*pt==-1){ break; } } puts(""); return 0; } ----------------------------------------------- 以上3つのプログラムで、◎1はprintfで「*」が付いてなく、正常に実行出来ました。 ◎2はprintfで「*」が付いてなく、エラーは出ませんが、文字列が表示されませんでした。 ◎3は文字列ではなく値ですが、printfで「*」が付いていて正常に実行できます。 これは、値の場合は「*pt」とすることで、ptのアドレスに値を代入しているという事で、「printf("%d ",*pt);」で実行できたということですかね? 文字列の場合は、先頭のアドレスを渡すだけなので、「printf("pt=%s\n",pt);」のようにしてアドレスを参照しないとダメであるということですか? ◎2で「printf("*pt=%s\n",*pt);」としてしまうと、何が起きてしまうのかわかりません。 以上、教えていただけると嬉しいです。

  • 文字列の並び替えについて。

    #include<stdio.h> #include<string.h> main() {char name[40][50]; int i; for(i=1;i<=;i++){ printf("名前="); gets(name[i]); } if(strcmp(name[1],name[2])>0){ printf("%s %s \n",name[2],name[1]);} if(strcmp(name[1],name[2])<0){ printf("%s %s \n",name[1],name[2]);} if(strcmp(name[1],name[2])==0){ printf("%s %s \n",name[1]);} } は二人の名前を早い順に並べ替えるものなんですが、これを五人の名前を並べ替えるものにしたいので、どのようなプログラムにしたらいいのか教えてください。

  • 配列やポインタに文字列を設定することについて

    ◎1------------------------- #include<stdio.h> int main(void) { char ss[80]; scanf("%s",ss); printf("%s\n",ss); return 0; } ---------------------------- ◎2--------------------------- #include<stdio.h> int main(void) { char *ss="abcde"; printf("%s\n",ss); return 0; } ------------------------- ◎3---------------------- #include<stdio.h> int main(void) { char *ss; ss="abcde"; printf("%s\n",ss); return 0; } ------------------------- 以上3つプログラムで疑問をいだいたのですが、 まず◎1で、これは例えば、 cahr ss[80]="abc"; のように配列ssに文字列"abc"そのものを入れているのか、 char *ss="xyz"; のようにまず"xyz"という文字列をメモリ上のどこかに設定し、その先頭番地をssに代入しているのか、どちらの考えでいいのかわかりません。 次に、◎2、3ではどちらも正常に実行できたのですが、特に◎3で「ss="abcde";」と記述していますが、ssにはアドレスを代入するという認識かあるのですが、文字列定数を代入しても問題ないのか?という疑問があります。 教えていただけたら嬉しいです。

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • 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); }

  • 文字列とポインタの問題です。

    #include<stdio.h> int f(char *s); int main(void){ char*str="nasida Institute of Technology"; int i; i=f(str); printf("%s:%d\n",str,i); return 0; } int f(char *s) { int j=0; while(*s!='\0'){ if(*s=='t'){ j++; } s++; } return j; } このプログラムの答えが3になるんですが、if文のとこの動作がよく分からないので、よろしくお願いします。

  • 文字列から数

    #include<stdio.h> int main (void){ char st[100]; printf("数字列を入力してください。"); scanf("%s",st); printf("%f %d %ld\n",atof(st),atoi(st),atol(st) ); return(0); } コマンドプロンプトから123.45と入力すると、 0.000000 123 2686588と表示されます。 %fのあたりが間違っているのでしょうか、123.45 123 123と表示されるように 御指摘お願いします。

  • 文字列の連結するプログラム

    独学でプログラミングをやっているんですが2つ文字列を1つにする方法がよくわかりません。(1)のプログラムは(b+3)のところは文字の長さを指定しているからだめで(2)はstrcpyやstrcatなどのコマンドを使わずにやるそうです。While分とかでやるんでしょうか?教えてください。 (1) #include <stdio.h> int main (void){ char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; int a,b; spel[6]=0; for(a=0;spel[a]!=0;a++){ spelC[i] = spelA[i]; }; for(b=0;spelB[b]!=0;b++){ spelC[b+3] = spelB[b]; }; printf("%s\n",spelC); return(0); }; (2) #include <stdio.h> #include <string.h> int main (void){ char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; strcpy(spelC,spelA); strcat(spelC,spelB); printf("%s\n",spelC); return(0); }

  • 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; }

  • 文字列のコピー

    文字列のコピーで長さの違う文字列をコピーすると変なふうになってしまいます。たとえば下のようにやるとdogeetみたいになってしまいます。dogだけを表示したいんです。strcpyやstrcatを使わずに文字の長さの違った文字列のコピーはどうやるんでしょうか? #include <stdio.h> int main (void){ char spelA[] = "street"; char spelB[] = "dog"; int i; for(i=0;spelB[i]!=0;i++){ spelA[i] = spelB[i]; } printf("%s\n",spelA); return(0); }

専門家に質問してみよう