C言語プログラム-文字列の先頭位置を探す関数の実装方法

このQ&Aのポイント
  • C言語プログラムにおいて、文字列ringo[]と文字列mikan[]が与えられ、ringo[]中にmikan[]が含まれる場合には、その文字の先頭の位置を返す関数suikaの実装方法について教えてください。
  • さらに、2つの文字列ringo[]とmikan[]を入力すると関数suikaの値を返すプログラムの作り方も教えてください。
  • 例えば、ringo[]がabcdefghijklmnでmikan[]がabcの場合、先頭の位置である0を返すようなプログラムです。ただし、含まれない場合は-1を返すものとします。
回答を見る
  • ベストアンサー

c言語 プログラム

文字列ringo[ ]、文字列mikan[ ]が与えられ(ringo[ ]とmikan[ ]は1以上の文字列が必ず入っているもの)、文字列ringo[ ]中に文字列mikan[ ]が含まれるときは最初にあらわれるその文字の先頭の位置(0~)を返し、含まれないときは-1を返す関数suikaのプログラムを教えてください。 また、その関数を用いて、2つの文字列ringo[ ]とmikan[ ](空白は含まない)を入力すると関数suikaの値を返すプログラムを教えてください。 (例1 ringo[ ]:abcdefghijklmn mikan[ ]:abc abcは0 (例2 ringo[ ]:abcdefghijklmn mikan[ ]:efghij efgは4 (例3 ringo[ ]:abcdefghijklmn mikan[ ]:xyz xyzは-1

質問者が選んだベストアンサー

  • ベストアンサー
noname#137556
noname#137556
回答No.1

果物シリーズ。たまには書いてみるか。 #include <stdio.h> #include <string.h> int suika(const char *ringo, const char *mikan) {   const char *p = strstr(ringo, mikan);   return p ? (p - ringo) : -1; } int main(int argc, const char *argv[]) {   const char *ringo = "abcdefghijklmn";   const char *mikan = "efghij";   printf ("%d\n", suika(ringo, mikan));   return 0; }

ringo_ring
質問者

お礼

ありがとうございます。 キーボードから入力したら動きました。

ringo_ring
質問者

補足

エラーが出てきて動きません・・・ .cpp(6) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(6) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(6) : error C2065: '  const' : 定義されていない識別子です。 .cpp(6) : error C2144: 構文エラー: 'char' は';' によって先行されなければなりません。 .cpp(6) : error C2440: '初期化中' : 'const char *' から'char *' に変換できません。 1> 変換で修飾子が失われます。 .cpp(7) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(7) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(7) : error C2065: '  return' : 定義されていない識別子です。 .cpp(7) : error C2146: 構文エラー: ';' が、識別子'p' の前に必要です。 .cpp(12) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(12) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(12) : error C2065: '  const' : 定義されていない識別子です。 .cpp(12) : error C2144: 構文エラー: 'char' は';' によって先行されなければなりません。 .cpp(13) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(13) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(13) : error C2065: '  const' : 定義されていない識別子です。 .cpp(13) : error C2144: 構文エラー: 'char' は';' によって先行されなければなりません。 .cpp(15) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(15) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(15) : error C3861: '  printf': 識別子が見つかりませんでした .cpp(17) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(17) : error C3872: '0x3000': この文字を識別子で使用することはできません .cpp(17) : error C2065: '  return' : 定義されていない識別子です。 .cpp(17) : error C2143: 構文エラー: ';' が'定数' の前にありません。

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

「エラーが出てきて動きません・・・」 だと! エラーを作ったのは、君なんだがな。 コピペしてそのままコンパイルしたんだよね。 ちゃんとキーボードから入力すればいい。 ただし、「エラーが出てきて動きません・・・」 というようでは、キーボードからの入力もうまくできないかもしれない。 ほんとは、デバッグでエラーを直せばいいだけなんだけどな。 たぶん、何行かある先頭の空白部分をtabかなんかにすれば通るんじゃないか? #1回答者様に申し訳ないよね。

ringo_ring
質問者

お礼

ありがとうございます。 キーボードから入力したら動きました。

関連するQ&A

  • C言語 プログラム

    文字列a[]と文字列b[]があり、a[]に含まれるb[]の文字すべてを@に変更する関数mikan[]を教えてください。 また、関数mikan[]を用いて、2つの文字列a[]とb[](空白は含まない)を入力すると関数mikan[]によって変更されたa[]を表示するプログラムを教えてください。よろしくお願いします。 (例 a[] :"a+b+c=abc" b[] :"a=" 上記だったら a[] :"@+b+c@@bc"

  • C言語について教えてください。

    二次元配列でまとめられた「配列で実現する文字列」の文字と文字列を表示する関数を定義し、その関数の機能を確認するプログラムを作成する。 ただし、以下の例のように文字列の個数が変更されても処理できる関数を作成する。 また、文字列の文字の個数は最大9とする(一次元配列の要素数は10とする) さらに、関数printf()をできるだけ用いない。 (1)二次元配列でまとめられたすべての文字列を「一度に」表示する関数を定義する (2)二次元配列でまとめられたすべての文字列の文字を「一度に」表示する関数を定義する。このとき、前回の課題で定義した「すべての文字を表示する関数print_all_char()」を新しく定義する関数から呼び出して用いる。 (3)二次元配列に各文字列を格納してまとめるとき、初期化ではなく、配列の宣言・定義の後で、関数strcpy()を用いること(例では、初期化によりまとめている) [例] char astr[][10] = { "ABCD", "EFGHIJ", }; [実行結果の例] すべての文字列の表示 ABCD EFGHIJ すべての文字列の文字の表示 A B C D E F G H I J [ヒント] (1)二次元配列でまとめられた文字列の文字あるいは文字列を表示する関数<返却値型><関数名>(二次元配列の受け渡しに対応した仮引数の宣言、文字列の数) (2)文字列の数を求める。二次元配列のすべての要素に文字列が格納されている場合、文字列の数=二次元配列の要素数(一次元配列の数) =sizeof(astr)/sizeof(astr[0]) ただし、sizeof演算子の生成する型はsize_t型である。 この問題について教えてください。問題丸投げだとは分かっていますがどうしても分かりません。教えてください。ちなみに前回の課題の定義は下の通りです。 void print_all_char(char *chs) { while(*chs!='\0') { printf("%c\n",*chs); chs++; } } よろしくお願いします。

  • Visual C++の簡単なプログラムについて

    Visual C++で以下のようなプログラムまたは関数を作りたいのでアルゴリズムもしくはヒントを教えてください。 (1) 入力された文字列の文字数を算出するプログラム (2) 『abc』→『abcabc』のように引数として受け取った文字列を2回繰り返した文字列に変換する関数

  • gmailのフィルタについて

    【ラベル】ABC        ∟EFG        ∟XYZ といったラベル構成になっています。 (1)タイトルに「JJJ」という文字列があるときに【EFG】へ (2)タイトルに「KKK」という文字列があるときに【XYZ】へ (3)タイトルに「JJJ」「KKK」という文字列があり「111」「222」というアドレスからの場合は「ABC」へ といったようにラベルを付けたいのですがどうやっても(3)の対象のメールに(1)や(2)のラベルが付いてしまします。 できない物なのでしょうか? できるのであれば是非ご教授お願いします。

  • C言語です。よろしくお願いします

    何をすればいいのかがさっぱりです 文字列を入力 入力された文字列について 次の(1)~(6)のすべてを表示するプログラムを作成 (1) 全文字の合計文字数 (2) 数字の文字数 (3) 英大文字の文字数 (4) 英小文字の文字数 (5) 空白の文字数 (6) その他の文字の文字数 データの読み込みはgetchar 関数を使用 実行例 total = (1) numeric= (2) large = (3) small = (4) space = (5) other = (1)-(2)(3)(4)(5) よろしくお願いします

  • c言語によって文字列を逆順するプログラム

    文字列の並びかたを逆にするプログラムを作るのですが、関数はtoreverse()という関数を作ってプログラムをつくらないといけません>< ちなみに、この関数が逆順にする関数です。あと文字列は最大100文字です。 わかる方いらっしゃいましたらお願いします。

  • プログラミング(C言語)について

    プログラミングの課題です。いろいろ考えたのですがうまくいきません。 文字検索プログラムをC言語で作ろうとしています。多くの文字列(例:ABAABCBBABC・・・)の中から検索したい文字列(例えばABC)を入力して、その文字列が何か所に含まれてそれぞれ何文字目に始まるかを求めるようにするというものです。 どなたかわかる方がいらっしゃいましたらご回答よろしくお願いいたします。できれば詳しく式などを書いていただきたいです。

  • C++のプログラムを作って頂けませんか?

    ソースをこちらにお願い致します!全て別のプログラムです cin.getline()を使用すること。また、stringクラス及び標準ライブラリの文字列関連の関数は使用しないこと 一つ目。 文字を入力すると、文字列中のアルファベット大文字を小文字に変換するプログラム。入力できる文字数は最大80文字。 例 入力:ABcdEFgh 結果:abcdefgh 二つ目。 文字列を入力すると、文字を循環しているように見えるプログラム。入力できる文字数は最大80文字。 例 入力:Hello 結果: Hello elloH lloHe loHel oHell Hello 三つめ。 文字列を入力すると、文字が逆順になるプログラム。入力できる文字数を最大80文字とする。 例 入力:Hello 結果:olleH どなたかお願いします!

  • VBAのプログラムについて

     VBAでプログラムを書いて以下のようなことを実行したいと考えていますが方法がよくわかりません。   ***1002とセルに入力されているセル列に対して、先頭の文字がaaaであったときに、その後ろの1002を計算して数値に変換するという作業です。  仮に、B列でaaa1002とあった場合に、セルの値がaaaであったときのみ、後ろの1002を100×10^2=10000と計算してB列に対応させてC列に出力したいと考えています。        B列     C列 1行目    aaa1002  10000  2行目 aac1001  空白 3行目 aaa4701  4700  :       :      : 具体的なプログラムのコード、もしくはこのような関数を使えばいいなどヒント等でも構いませんので 教えてください。よろしくお願いします。

  • c言語 暗号化のプログラム

    大文字アルファベットの文字列を暗号化するプログラムを作りたいのですが、どうやったら暗号化するのかわかりません。 暗号化は文字をずらして行います。 ABC→BDF Aは1文字目なので一文字ずらしてB Bは2文字目なので二文字ずらしてD Cは3文字目なので三文字ずらしてF わからないのは文字のをどうやってずらすのかです。 ヒントだけでもいいので・・・

専門家に質問してみよう