アプリ版:「スタンプのみでお礼する」機能のリリースについて

strlen関数の働きをする新たな関数を作りたいですが困っています。急いでいるので至急教えてください。

A 回答 (7件)

No.2の改良版



int match (char* s1, char* s2){
 int i;

 for (i=0; s1[i]!='\0'; i++){
  if (s1[i] != s2[i]){
   break;
  }
 }
 if (s1[i] == s2[i]) {
  return 0;
 } else {
  return -1;
 }
}

文字列終端までi番目の文字を比較して、全部同じなら0を返し、違っていたら-1を返します。s2がs1より短くても文字比較でループを抜けるので問題ないですね。
    • good
    • 0

strcmpは2つの文字列が同じ時に0を返し、違うときはプラスかマイナスかで文字列の大小を比較できる。


qsortと相性がいいんです。
学校の先生にバレそうな感じに書いて見ました。

int my_strcmp(const char *s1, const char *s2)
{
while (*s1 && *s1 == *s2) {
s1++;
s2++;
}
return (int)*(const unsigned char*)s1 - (int)*(const unsigned char*)s2;
}
    • good
    • 0

最初に、変更点を(これが最後のはず)。


下から4・5行目を以下に変更。
=======================
if (t2[i] == '\0'){
 if(t1[i] != t2[i])
   return -1;
 else
   break;
}
=======================

ポイントだけ。
1) #include <string.h> は不要。
2) int strlen(char*) を int strlen(char*, char*) に変更。
3) if(strlen( str1, str2 )) を
if(strlen( str1, str2 ) == -1) に変更。
4) /*strlen関数の定義*/ をmain関数の外におき、
#4(およびここで訂正した)match関数を strlen 関数に名前を変えて置く。
5) int c は不要。

とすれば、期待する動作をします。
が、どのように苦戦しているかを示したほうが、
良回答が得られたのではないかと思います。
    • good
    • 0

#2 です。


先の例だと
ABC と ABCabc が一致してしまうので、以下のように変更。

int match (char *s1, char* s2){
 int i;
 int l1=0, l2=0; // 文字列1、2の長さ
 char *t1, *t2; // 文字列1、2へのポインタ

 for(i=0; s1[i]!='\0'; i++) l1++; // 文字列1の長さを取得
 for(i=0; s2[i]!='\0'; i++) l2++; // 文字列2の長さを取得

 l1 > l2 ? (t1 = s1, t2 = s2) : (t1 = s2, t2 = s1); // 長さを比較

 for (i=0; t1[i] != 0; i++){
  if (t1[i] != t2[i])
   return -1;
  if (t2[i] == '\0' && t1[i] != t2[i])
   return -1;
 }
 return 0;
}

この回答への補足

このプログラム目的?は文字列の比較です。
補足ではありませんが、このソースの合わしたいですが苦戦しています。
#include <stdio.h>
#include <string.h>
int strlen(char*);
void main(void)
{
/*文字列の構造体*/
char str1[81];//str1の領域確保
char str2[81];//str2の領域確保

int c;

printf("文字列を入力して下さい。\n");
scanf("%s",str1);//str1に文字列入力
printf("入力した文字(文字列)は『%s』です。\n",str1);
printf("文字列を入力して下さい。\n");
scanf("%s",str2);//str2に文字列入力
printf("入力した文字(文字列)は『%s』です。\n",str2);


if(strlen( str1, str2 )){
printf("入力された文字(文字列)は一致しませんでした。\n");}
else{
printf("入力された文字(文字列)は一致しました。\n");}

/*strlen関数の定義*/



}

補足日時:2004/10/21 01:45
    • good
    • 0

文字列を比較する関数はstrcmpです。


strlenは文字列の長さ(バイト数)を返す関数ですが、ご質問はどちらでしょう?

また、既存の関数を使用するのではなく、自作する理由が解りませんが..

文字列の長さを求めるのであれば、文字列の終端('\0')まで1バイトずつポインタをずらしながらループし、ループ回数をカウントすれば良いです。

文字列比較であれば、上述と同じループ中で、if文を使い1バイトずつ比較します。

この回答への補足

strcmpの間違いです。strcmp(文字列比較)についての質問です。
自作する理由は学校の課題です。

補足日時:2004/10/21 01:14
    • good
    • 0

文字列の比較には、


strcmp ()
を使います。string.h をインクルードする必要があります。
strlen は文字列の長さを取得する関数です。

自作するなら、配列の各項ごとに比較するしかないと思います。

int match (char* s1, char* s2){
 int i;

 for (i=0; s1[i]!='\0'; i++){
  if (s1[i] != s2[i]){
   return -1;
  }
 }
 return 0;
}
    • good
    • 0

質問事項が書かれていないようですが、何に困っておられるのでしょうか?

この回答への補足

strlen関数(文字列の比較する関数)と同じ働きをする関数αを作りたいですがどのように作れば良いのか分かりません。教えて下さい。
ちなみに関数の作り方の構文は知っています。

補足日時:2004/10/21 00:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!