プログラミングの問題について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
akatuki

プログラミングの問題について

#1

投稿記事 by akatuki » 14年前

プログラムの問題で質問がありますどうか回答を教えてください。

文字列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: プログラミングの問題について

#2

投稿記事 by bitter_fox » 14年前

akatuki さんが書きました: このプログラムを#include<string.h>や strstr()などを使わないでできるプログラムを教えてください。よろしくお願いします。
strstr関数を使わずにやるのであれば、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を返します

アバター
さかまき
記事: 92
登録日時: 14年前

Re: プログラミングの問題について

#3

投稿記事 by さかまき » 14年前

>strstr関数を使わずにやるのであれば、strstr関数がやっていることを自前で実装すれば良いですね。
ちょっと検索すれば、すぐにソースがみつかります。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1228633452
などが、処理内容を理解するうえでも参考になると思います。

試験問題としてはいいかもしれませんが、もし課題だとするとあまり良い問題じゃないですね。

閉鎖

“C言語何でも質問掲示板” へ戻る