プログラムの問題で質問がありますどうか回答を教えてください。
文字列text[]と文字列pat[]が与えられたとき、文字列text中に文字列patが含まれるときは最初に現れるその文字列の先頭の位置(0~)を返し、含まれないときは-1を返す関数searchを作成せよ。また、その関数を用いて、2つの文字列text[]とpat[](空白は含まない)を入力すると関数searchの値を返すプログラムを作成せよ。ここでtextとpatには長さ1以上の文字列が入っているものとする。
(例:text[]=”thisisatesttextdate”の中に、pat[]=”this”は0の位置に、
pat[]=”text”は7の位置に現れる)ただし#include<string.h>や strstr()などを使わないで。
ちなみに私は、
#include<stdio.h>
#include<string.h>
int search(char text[],char pat[])
{
const char *p = strstr(text,pat);
if(p) return p -text;
return -1;
}
int main(void)
{
char text[128],pat[128];
scanf("%s %s", text, pat);
printf("%d\n", search(text,pat));
return 0;
}
この様に編集すると、
thisisatesttextdata
this
と入力すると
0
と画面に表示され
thisisatesttextdata
test
と入力すると
7
と画面に表示され
thisisatesttextdata
abc
と入力すると
-1
と画面に表示されました。
このプログラムを#include<string.h>や strstr()などを使わないでできるプログラムを教えてください。よろしくお願いします。
プログラミングの問題について
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: プログラミングの問題について
strstr関数を使わずにやるのであれば、strstr関数がやっていることを自前で実装すれば良いですね。akatuki さんが書きました: このプログラムを#include<string.h>や strstr()などを使わないでできるプログラムを教えてください。よろしくお願いします。
で、strstr関数の挙動としては、(第一引数をarg1、第二引数をarg2とする(両方ともchar*型))
arg1が'\0'でない間、(ループ1)
iをarg1のオフセットとして、arg2[j]が'\0'になるまで、同値かを調べていきます。(ループ2)
(同値かどうかを調べる式は、iがarg1のオフセットとなるので
arg1[i+j] == arg2[j]
になります)
もし、途中で違っていたらループ2を抜けます。
また、'\0'になった場合はarg2の終点まで完全一致したという事なのでiの値を返します。
ループ1を抜けた場合は、arg1の終点までarg2が見つからなかったという事なので、-1を返します
Re: プログラミングの問題について
>strstr関数を使わずにやるのであれば、strstr関数がやっていることを自前で実装すれば良いですね。
ちょっと検索すれば、すぐにソースがみつかります。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1228633452
などが、処理内容を理解するうえでも参考になると思います。
試験問題としてはいいかもしれませんが、もし課題だとするとあまり良い問題じゃないですね。
ちょっと検索すれば、すぐにソースがみつかります。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1228633452
などが、処理内容を理解するうえでも参考になると思います。
試験問題としてはいいかもしれませんが、もし課題だとするとあまり良い問題じゃないですね。