質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1622閲覧

数列の検索について

junbx42

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

0クリップ

投稿2016/02/06 08:28

プログラミング初心者です。

036132567...

のようなファイル(または配列)に対して検索をかけたいです。

036を検索したら0
361を検索したら1
613を検索したら2

を返すようにするにはどのように書けば良いでしょうか。
検索をかける数は配列に1桁ずつ格納されいるイメージです。(k[0]=0,k[1]=3,k[2]=6,...)

丸投げしてしまい申し訳ないです、よろしくお願いします。

faithandbrave👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2016/02/06 09:09

質問が曖昧すぎて回答しようがないです。もう少し具体的に質問下さいな。
junbx42

2016/02/07 01:42

はい、以後気を付けます。 ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

ある配列の中から別の配列と同じになっている所を探すと言うことでしょうか?

GCC/Clangであれば、GNU拡張のmemmemを使うと簡単だと思います。

C

1#define _GNU_SOURCE 2#include <string.h> 3#include <stdio.h> 4 5int main(void) 6{ 7 int list[] = { 0, 3, 6, 1, 3, 2, 5, 6, 7 }; 8 int target[] = { 6, 1, 3 }; 9 int *point = (int *)memmem(list, sizeof(list), target, sizeof(target)); 10 if (point == NULL) { 11 printf(u8"見つかりませんでした。\n"); 12 } else { 13 int index = point - list; 14 printf(u8"%d 番目に見つかりました。\n", index); 15 } 16 return 0; 17}

ただ、これではVisual C++だと使えないので、Visual C++の場合はC++でstd::searchを使うと良いと思います。(ただし、下のコードはVisual C++では未テストです。また、メッセージをUTF-8にしているため、Visual Studio 2015以上でコンパイルし、UTF-8のターミナルで実行して下さい。)

C++

1#include <algorithm> 2#include <iostream> 3#include <vector> 4 5int main() 6{ 7 std::vector<int> list = { 0, 3, 6, 1, 3, 2, 5, 6, 7 }; 8 std::vector<int> target = { 6, 1, 3 }; 9 auto point = std::search(list.begin(), list.end(), 10 target.begin(), target.end()); 11 if (point == list.end()) { 12 std::cout << u8"見つかりませんでした。" << std::endl; 13 } else { 14 int index = point - list.begin(); 15 std::cout << index << u8" 番目に見つかりました。" << std::endl; 16 } 17 return 0; 18}

投稿2016/02/06 10:03

編集2016/02/06 10:06
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

junbx42

2016/02/07 01:41

ご丁寧に2種類もありがとうございます!!! MacでXcodeを使ってやっていたので1つ目のものでできました!! ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問