• 締切済み

stricmp

Quantの回答

  • Quant
  • ベストアンサー率18% (23/122)
回答No.5

引き数 s1 と s2 のすべての英字を比較の前に小文字に変換して比較しているだけです。

関連するQ&A

  • C++言語 メンバ関数

    何気なく使用しているクラスのメンバ関数、これの中身が実際どうなってるか知りたいです。大別して2種類に分かれますので以下の2つを 教えて下さい。また詳しく載っているサイトなどあれば教えて下さい。 1,stringクラスMid(int start,int length関数と operator関数+について class String{ char *p; char *q; public: //各定義 }; String String::Mid(int start,int length) const { // } String String::operator+(const String&s)const{ return String(p+s.q+s.p); } 最初の方はイメージもつかず、2つめのほうはポインタに ポインタを加えようとしましたとでます。 教えて下さい。

  • 質問が多いです・・・・

    C++のconst+その他について疑問が出てきてしまったため質問しようと思います。 現在下記のURLで示したサイトで勉強中です。http://www5c.biglobe.ne.jp/~ecb/cpp/04_19_02.html :::質問1::: 上記のサイトで提示してあるプログラムについて質問をしていきますが、上のプログラムを全て理解しなくても大丈夫だと思います。質問内容は表記についてです。 プログラムではたくさんの代入演算子、比較演算子を自分で定義していますが、比較演算子についてクラス内部で定義してあるものと、外部関数をfriend登録してある関数とに分かれています。この差というのは起動オブジェクトがそれ自身のクラスから生成された場合はメンバ関数として定義し、起動オブジェクトが単なる変数などの場合外部関数として定義するという区別でいいのでしょうか? :::質問2::: 質問1で紹介したたくさんの比較演算子を自分で定義してある部分についてですが例えば次のような場合です。 bool String::operator< (const char* p)const{ return strcmp( pStr, p ) < 0; } この場合のconstについて質問したいところがあります。boolの行の一番最後のconst・・・・ この意味はoperatorの前に書いてあるクラスのメンバ変数をこの関数の処理で変更しないという解釈でよいのでしょうか? そしてreturn文についてです。 この関数がboolと定義されているところから想像はつきますが、 strcmp( pStr, p ) < 0 この結果が返されるということでいいんですよね?このような記述の仕方は初めてみましたが、例えば if( strcmp( pStr, p ) < 0 )   return TRUE; else   return FALSE; と記述しても同じですよね? :::質問3::: キャスト演算子の部分で次のように記述してあります。 String::operator const char*()const{    return pStr; } 恥ずかしながら、どのような処理になっているかさっぱりです。もし分かる方がいたら解説をお願いしたいです。 長く質問してしまって申し訳ないです。 全てといわずこのどれか1つでもいいので、答えることができる方はよろしくお願いします。

  • C言語について質問です

    新版 明解C言語 入門編 この本でC言語を勉強しています。 授業とかではなく自主的にやっています。 入力した文字を出力するプログラムを添字演算子なしで作る問題(演習11-1)を解いてみました。 void put_string(const char *s) { while(*s) putchar(*s++); } int main (void) { char s1[128]; printf("type something: "); scanf("%s", s1); put_string(s1); return(0); } これについて二つの疑問があります。 (1)constと指定されているのにインクリメントされていたら値が変わってエラーが出ないのはなぜか (2)main関数でないほうの関数で*を全て外すと 「パラメータ 's' は const signed char 型として定義されているので signed char * は渡せない(関数 main )」といったエラーが出るのですがなぜか

  • strstr()関数の実装内容について。

    strstr()関数が、どのように実装されてるか知りたかったため、strstr.cの中身を見てみたのですが、 分らない処理がありました。 char * __cdecl strstr (const char * str1, const char * str2) {  char *cp = (char *) str1;  char *s1, *s2;  if ( !*str2 )   return((char *)str1);  while (*cp)  {   s1 = cp;   s2 = (char *) str2;   while ( *s1 && *s2 && !(*s1-*s2) )    s1++, s2++;    if (!*s2)     return(cp);     cp++;    }  return(NULL); } while文のネストの部分で、*s1 && *s2 && !(*s1-*s2)とありますが、 (*s1 && *s2) または !(*s1-*s2) のどちらか一方のみではまずいのでしょうか? 解説、アドバイスの程よろしくお願い致します。

  • C言語のint型の配列が分かりません

    #include<stdio.h> int main(void) { int str[ ]={0,1,2} printf("%s\n", str); return 0; } というプログラムをC言語でつくってみましたが動きません.(012と表示されて欲しかったのですが) int str[ ]={1,2,3}の部分をchar str[ ]={'0','1','2'}とすれば動きます. そこで質問なのですが, printf("~%s~", (配列名));  はchar型の配列にしか適応できないのですか? ※追記 puts関数の定義は int puts (const char *str); であるそうなので char型の仮引数にはchar型のアドレスを渡さなければいけません. ではprintf関数の定義は一体どんなものなのですか?

  • c言語関数の(1)~(5)までの部分が何をやっているのかよく分からない

    c言語関数の(1)~(5)までの部分が何をやっているのかよく分からないので、どなたか解説をお願いします。 int memcmp(const void *s1, const void *s2, size_t n) { const unsigned char *p1 = (const unsigned char *)s1; const unsigned char *p2 = (const unsigned char *)s2; while (n-- > 0) { if (*p1 != *p2) return (*p1 - *p2); p1++; p2++; } return (0); } return (*p1 - *p2); > (1) ---------------------------------------------------------------------- char *strcat(char *s1, const char *s2) { char *p = s1; while (*s1) s1++; /* s1を末尾まで進める */ while (*s1++ = *s2++) ; /* '\0'が見つかるまでs2をコピー */ return (p); } while (*s1++ = *s2++) ; > (2) ---------------------------------------------------------------------- char *strstr(const char *s1, const char *s2) { const char *p1 = s1; const char *p2 = s2; while (*p1 && *p2) { if (*p1 == *p2) { p1++; p2++; } else { p1 -= p2 - s2 - 1; p2 = s2; } } return (*p2 ? NULL : (char *)(p1 - (p2 - s2))); } while (*p1 && *p2) > (3) p1 -= p2 - s2 - 1; > (4) ---------------------------------------------------------------------- char *strcpy(char *s1, const char *s2) { char *p = s1; while (*s1++ = *s2++) ; return (p); } while (*s1++ = *s2++)   > (5) ;          > (5) ----------------------------------------------------------------------

  • Cの関数定義で見慣れない記述がありました

    libeventというソフトのソースに以下のような関数定義がありました。 この関数の定義部分が見慣れないものでした。 この関数は、size_tを戻り値としてもち、_event_strlcpyという名前で、 引数として、dst, src, sizの三つをもつというのはわかるのですが、 どうして_event_strlcpy(dst, src, siz)のように、 引数に型が宣言されていないのでしょうか?こういう書き方はアリなのですか? 普通は、_event_strlcpy(char *dst, const char *src, size_t size) というように書くものではないでしょうか? しかも、_event_strlcpy(dst, src, siz)の次の行からの、 char *dst;const char *src;size_t size;の三行は何なのでしょうか? このような位置にこういった書き方をするのはアリなのですか? size_t _event_strlcpy(dst, src, siz) char *dst; const char *src; size_t siz; { register char *d = dst; register const char *s = src; register size_t n = siz; /* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if ((*d++ = *s++) == 0) break; } while (--n != 0); } /* Not enough room in dst, add NUL and traverse rest of src */ if (n == 0) { if (siz != 0) *d = '\0'; /* NUL-terminate dst */ while (*s++) ; } return(s - src - 1); /* count does not include NUL */ }

  • オペレータ定義について

    すみません、オペレータ定義について教えてください。 ■以下のようなクラスに、[] が定義されていて、 class String { public:       ・       ・ (メンバ関数がいくつかあり)       ・       // num 番目の文字を返す       char operator[](int num) const;       char& operator[](int num); private:       char* string; }; ■関数はこのように書かれていて、 char String::operator[](int num) const {     // 文字列の num 番目の文字を返す 1     return string[num]; } char& String::operator[](int num) {      // 文字列の num 番目の文字を返す 2      return string[num]; } ■これを →[] main() から使うにはどのようにしたらいいのでしょうか?

  • sscanf() 関数の第 1 引数の型

     カーニハン/リッチー・著,石田晴久・訳の「プログラミング言語 C・第 2 版」で,「付録 B」にある sscanf() 関数のプロトタイプが   int sscanf(char *s, const char *format, ...) とあって,疑問に思いました。この第 1 引数の型は,「char *」ではなくで「const char *」のほうが合理的のように思えるのです。JIS X 3010-2003 では,const がついていましたし,さまざまな解説・マニュアルでも const つきで示されています。  そこで,ANSI C または JIS X3010-1993 の仕様書をお持ちの方,それらの仕様書の中で sscanf() 関数がどのようなプロトタイプを持っているか,ご教示願えませんでしょうか。ひょっとしたら本当に const がついていないのかもしれないし,書籍から何らかの理由で const が抜け落ちてしまったのかもしれません。  細かい点で恐縮ですが,ご回答くだされば幸いです。

  • FILE*のfopenの素朴な疑問

    fopenの定義をいかに記します。 FILE *fopen(const char *filename, const char *mode); filenameはconstで定義されることを要求されております。 が以下の内容はコンパイルできます。 int main(int argc, char** argv) { FILE* ftemp; ftemp = fopen( argv[1], "r" ); } この場合、argvはconstではありません。 constの必要性ってありますか?