• 締切済み

c言語 文字列の比較

lucenterの回答

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

まず、いきなり出てくる変数cはどこで定義していますか? その使用方法でのcは char *c; で定義していますか? おそらくやりたいことは #include <stdio.h> #include <string.h> #define BUFMAX 45 void main(void){ char smsg[BUFMAX]; char pass[BUFMAX]; FILE *fp; fp = fopen("filename.txt","r"); scanf("%s",pass); fgets(smsg,BUF-1,fp); if(strcmp(pass,smsg) == 0){ puts("同一"); }else{ puts("相違"); } } ではないでしょうか? #defineの使い方も間違えていますのでC言語を初歩から学びなおすことをお勧めいたします。

kuhorin
質問者

補足

すいません。記載不足で返答にも困られたと思います。 こんかい質問させていただいた内容は、書いていただいたとおりです。 どうも、コマンドで入力したものと、行から読み込んだものでコマンドには同じ表示で出るのですが、strcmp()で比較するとだめみたいです。

関連するQ&A

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

  • 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言語で作成したのですが、 コンパイルのときに警告で「問題のあるポインタの変換(関数 main )」と出て、うまい具合に動きません。改良点を教えてください。 #include<stdio.h> #include<string.h> #include<stdlib.h> unsigned char *s1; unsigned char *s2; unsigned char *cp; FILE *fp; char fname[64]; void TestStrStr(void); main(){ s1 = calloc(256, sizeof(unsigned char)); s2 = calloc(256, sizeof(unsigned char)); printf("Input Filename..."); scanf("%s",fname); while(1){ fp = fopen(fname, "r"); if(fp == NULL){ printf("ファイルを開くことができません...\n"); printf("Input Filename..."); scanf("%s",fname); }else break; } s1=fp; // printf("文字列1を入力してください:"); // scanf("%s",s1); printf("文字列2を入力してください:"); scanf("%s",s2); TestStrStr(); return 0; } void TestStrStr(void){ cp = strstr(s1, s2); if(cp == NULL) printf("'%s'に'%s'のいずれの文字も含まれない.\n", s1, s2); else printf("'%s'の中に現れる'%s'という文字列は%d文字目にある.\n", s1, s2, cp - s1 + 1); free(s1); free(s2); }

  • C言語 文字列操作

    トリム関数とリムーブ関数を作成してみました。改良点はありますでしょうか? ~~~~以下ソース~~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> char *Trim(char *str); char *Remove(char *str, char *rmv); void main(void) {  char str[10], rmv[10], *p;  int c;  /* " abcd "をトリムする */  strcpy(str, " abcd ");  printf("トリム前 |%s|\n", str);  p = Trim(str);  printf("トリム後 |%s|\n", str);  /* 指定文字列を削除する */  printf("削除する文字列を入力してください :");  scanf("%s", rmv);  Remove(str, rmv);  printf("削除後 |%s|\n", str);  exit(0); } char *Trim(char *str) {  char space[] = " ";  char null[] = "";  int index = 0;  while(1){   if(strcmp(&(str[index]), null) == 0){    index--;    if(strncmp(&(str[index]), space, 1) == 0){     strcpy(&(str[index]), &(str[index]) + 1);    }else{     break;    }   }else{    if(strncmp(&(str[index]), space, 1) == 0 && index == 0){     strcpy(&(str[index]), &(str[index]) + 1);    }else{     index++;    }   }  }  return str; } char *Remove(char *str, char *rmv) {  int c, size, i;  char *p;  c = '\0';  p = strchr(rmv, c);  size = p - rmv;  for(i = 0; i < size; i++){   c = (int)rmv[i];   p = strchr(str, c);   if (p != NULL) {    strcpy(&(str[p-str]), p + 1);   }   else{    printf("""%c""は見つかりませんでした\n", c);   }  }  return str; }

  • C言語 文字列の操作

    文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

  • c言語の文字列出力

    プログラミング超初心者です サイトで文字列の出力について調べていたところ c言語は変数に文字列を代入することができないのでstrcpy関数を使い以下のようにするとあります char s[5]; strcpy(s, "ABCDE"); printf("%s\n", s); ところが他のサイトでは以下のように説明しています char s[5] = "ABCDE"; printf("%s\n", s); 明らかに後者の方が簡単で良いように見えるのですが違いはなんですか? あと、文字列の配列の指定?の[5]の部分なのですが 数字を記載しているところがほとんどですが省略しているところも有ります どんな文字列が入るかわからない場合もありますがここは省略しない方が良いのですか? よろしくお願いします

  • c言語のポインタへの文字列入力についてです。

    当方c言語初学者なのですがscanfを使ってポインタに文字列を入力したいのですがバグが発生して進みません・・・どういうことなのでしょうか? #include <stdio.h> int main(void) { char *a; scanf("%s", a); printf("%s", a); return (0); } *aをa[128]; のように配列に変えるとうまくいくことはなんとかわかるのですが・・・助けてください(^_^;)

  • c言語のポインタ

    学校で、名前、住所などを構造体に入力するというプログラムをc言語で書いています。 そこで、質問なんですが・・・ fgetsで文字を入力し、構造体にデータを入れる関数に渡すと セグメンテーションエラーになってしまいます。 文字列のポインタの問題だと思うのですが、よくわかりません。 誰か教えてください!! ーーーーソースーーーーー printf("name "); fgets(xx,255,stdin); printf("%s",xx); printf("tel "); scanf("%s",t); strcat(t,"\n"); printf("zip "); scanf("%s",z); strcat(z,"\n"); printf("add "); scanf("%s",ad); strcat(ad,"\n"); printf("email "); scanf("%s",em); strcat(em,"\n"); root = makenode( *xx,ss,y,t,z,ad,em, root ); //関数で構造体にデータを挿入する 関数 BinNode *makenode( char *x,char *t,char *z,char*ad,char *em, BinNode *current ) { if( current == NULL ) //currentに何も入っていないとき { current = (BinNode*)malloc(sizeof(BinNode)); //領域を確保する strcpy( current->data, x ); //読みを入力 strcpy( current->tel, t ); //電話番号を入力 strcpy( current->zip, z ); //郵便番号を入力 strcpy( current->add, ad ); //住所を入力 strcpy( current->email, em ); //emailを入力 current->left = current->right = NULL; //右と左のノードをNULLにする }

  • c言語のscanfとfgetsについて

    2つの単語A, Bを入力して、AがBに含まれるか否かというプログラムで 以下のようなものを作成しました。 そこで質問なのですがscanf()をfgets()に変えるとうまく動作しません どこが間違ってますか? 変更したいfgets fgets(key, sizeof(key), stdin); fgets(word, sizeof(word), stdin); ------------------------------------------------- int main(void) { char key[101], word[101]; scanf("%s", key); scanf("%*c%s", word); if (strstr(word, key) != NULL) { printf("Find %s In %s\n", key, word); } else { printf("Not Find\n"); } return 0; }

  • C言語の文字列の取り扱いが分かりません

    こんにちは。 C言語で分からないことがあり、質問させていただきました。 学校で、文字列の取り扱いを習いました。 そこで質問なんですが、以下のソースコードをstrcpy , strcat , strcmp , strlen を使わずに書くことってできないですか? 先生に質問したところ、ポインタとかいうのを使うのだそうですが、それを使わずに書くことってできるんですか?もしよろしければお願いします。 以下のプログラムですが、ユーザーから2つの文字列を受けて、そこから4つの文字列関数を使ってみましょう、というやつです。実行結果も貼っておきますね。 #include <string.h> #include <stdio.h> int main(void) { char str1[80], str2[80]; int i; printf("INPUT 1st word-line. : "); gets(str1); printf("INPUT 2nd word-line. : "); gets(str2); /*文字列(word-line)の長さを確認します。*/ printf("%s is %d moji long.\n", str1, strlen(str1)); printf("%s is %d moji long.\n", str2, strlen(str2)); /*文字列を比較します。*/ i = strcmp(str1, str2); if (!i) printf("two word-lines are same length.\n"); else if (i < 0) printf("%s is smaller than %s.\n", str1, str2); else printf("%s is bigger than %s.\n", str1, str2); /*十分なスペースがあるのなら、str2をstr1の最後に結合させます。*/ if((strlen(str1) + strlen(str2)) < 80 ){ strcat(str1, str2); printf("%s\n", str1); } /*str2をstr1にコピーする*/ strcpy(str1, str2); printf("%s %s\n", str1, str2);