C言語/C++言語の宿題を片付けます 65代目

このエントリーをはてなブックマークに追加
227& ◆yZhi4TN6HY
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク):
長さ127以下の英数字、空白の並びからなる文字列を2つ入力し、それぞれT1,T2とする。
T1が"ABC",T2が"AB"の場合のように、T2の先頭部分がT1の先頭部分に含まれるときは1を、そうでないときは0を値として返す関数
int chkmatch(char *t1,char*t2)を作成しなさい。配列宣言以外はポインタを用いる。文字列の長さのエラー処理は必要ない。

計算の手順として、文字列の先頭から1文字ずつ一致するかどうか比べる。
T2にあたる文字列中の比較対象となった文字が’\0'であればT2はT1に包含されたものとして扱う。
これ以外で比較時に1文字でも一致しない場合があれば包含されていないとして扱う。

この関数を用いて2つの文字列を与えたとき、1つ目の文字列の中に2つ目の文字列が含まれている場合には
"yes"をさもなければ"no"を出力するプログラムを作りなさい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 今日の午前4時まで

文章長いですが、よろしくお願いします。
228デフォルトの名無しさん:2006/06/06(火) 01:53:54
>>227
#include <stdio.h>
int chkmatch(char* t1,char* t2) ;
int main(void) {
char t1[128],t2[128] ;
printf("一つめの文字列を入力してください:") ;
fgets(t1,sizeof(t1),stdin) ;
printf("ふたつめの文字列を入力してください:") ;
fgets(t2,sizeof(t2),stdin) ;
if(chkmatch(t1,t2)) {
printf("yes\n") ;
} else {
printf("no\n") ;
}
return(0) ;
}
int chkmatch(char* t1,char* t2) {
while(*t1 == *t2) {
t1++ ;
t2++ ;
}
if(*t2 == '\n' || *t2 == '\0') return(1) ;
return(0) ;
}
229デフォルトの名無しさん:2006/06/06(火) 02:03:50
>>227
>[4] 期限: 今日の午前4時まで
すげえ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int chkmatch(char* t1, char* t2) {
return strstr(t1, t2)==t1;
}
int main() {
char T1[128];
char T2[128];
int i;
gets(T1);
gets(T2);
for(i = 0 ; ; i++) {
if(chkmatch(T1+i, T2)) {printf("yes\n"); break;}
if(T1[i]=='\0') {printf("no\n"); break;}
}
return 0;
}