• ベストアンサー

INSTR

こんにちわ。 なぜかオラクルシルバーという資格を取らなければいけないことになりました。 私パソコンなんて全然わからないのに・・。 今、翔泳社から出ている「オラクルマスター教科書 Silver」という本で勉強中ですが、わからない事がありますので教えていただけたら嬉しいです! 文字列関数のINSTRについてなんですが、教科書に例として INSTR('SYSTEMTECHNOLOGY-I','E',8,1) ----------------------------------- 9 と載っています。 INSTRの定義は、INSTR(char1,char2,n,m)で、 char1のn番目の文字からchar2の探索を開始し、char2がm番目に現れる位置を戻す、とあります。 なので、この例題の場合は、 'SYSTEMTECHNOLOGY-I'の8版目の文字列→E から E の探索を開始し、 E が 1 番目に現れる位置を戻すのですから、 答えは0だと思うのですが・・・・・・・ 私の考え方はどこが間違っているのでしょうか。 数学は苦手なんです~~~ 宜しくお願いします!!

  • piyora
  • お礼率99% (471/472)

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

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 MovingWalk さんのおっしゃるように、INSTR の復帰値は 「8」で問題ありません。 手元の環境で確認してみました。 SQL> select INSTR('SYSTEMTECHNOLOGY-I','E',8,1) from dual; INSTR('SYSTEMTECHNOLOGY-I','E',8,1) -----------------------------------                  8 「SYSTEM」と「TECHNOLOGY-I」の間にスペースが入っている なんて事でなければ、ミスプリントだと思います。 市販本とかで勉強して、不明な点があればやはりマニュアルを 読む事になると思います。 ユーザ登録が必要 (無料) ですが、OTN Japan でPDF 形式の マニュアルとトライアル版のソフトウェアを公開していますので、 こちらをDownload されると良いと思います。

参考URL:
http://technet.oracle.co.jp/
piyora
質問者

お礼

こんばんわ!回答ありがとうございます☆ やっぱり8で正解のようですね。 この教科書大丈夫かな・・ 他にも納得できない解答が多いんです。 私、家にオラクルは無いので(というか会社にも無いのですが・・)検証ができなかったんですが、評価版がDLできるのですね。 知りませんでした。 さっそくダウンロードして勉強します! またわからない事があったら質問すると思いますが、その時はまたよろしくお願いします!!

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

>Eが1番目に現れる位置を戻すのですから、答えは0だと思うのですが・・・・・・・ ??? 8番目の位置に最初の'E'があるので、8でいいのではありませんか?

piyora
質問者

お礼

こんにちわ!さっそくの回答ありがとうございます! そうか、最初に出てきた位置っていうのは最初から数えてなんですね! それならMovingWalkさんの言うとおり、8で正解なのは頷けるのですが、 答えは9って書いてあるんですよー! なんで9なんでしょう??

piyora
質問者

補足

こんばんわ! やっぱりMovingWalkさんの答えであってるみたいです! 教科書が間違ってるなんて思わなくて混乱してしまいました。 これに懲りず、また見かけたらよろしくお願いします☆

関連するQ&A

  • VBAのInstrについて

    webページのソースコードを変数に代入し、 その中から<td class="abc">という文字列の位置を取得したいので hogehoge = Instr(baf,"<td class="abc">")と指定すると""の部分でエラーになってしまいますので ""をutf-8にあらかじめ変換し、%22で囲ってみました hogehoge = Instr(baf,"<td class=%22abc%22>") これでエラーはでませんが、これではソースコードから該当の文字列が探せません。 Instrで指定の文字の位置を取得したいが、その文字列内に「"」が含まれている場合、 どのようにすれば正常に取得できるでしょうか? よろしくお願いします。

  • C言語の質問です><

    C言語の質問です>< 次のような実行結果が得られるプログラミングをしたいのですが・・ ちなみにポインタや標準関数のstrシリーズは使用不可です。 文字列1:ABCDEFGHIJ 開始位置:0 文字数:3 文字列2:ABC 開始位置が7で文字数が5とかの場合は'¥0'の位置まで表示するようにしたいのですが、自分の以下のプログラムだと開始位置が0で文字が3だとABCと表示できるのですが、開始位置が7で文字数が5とかだとできません>< #include<stdio.h> void main(void) { char m1[]="ABCDEFGHIL"; char m2[11]; int i,j,start,mozikazu; printf("文字列1:%s\n",m1); printf("開始位置:"); scanf("%d",&start); if(start >=0 && start <11) { printf("文字数:"); scanf("%d",&mozikazu); } if((start+mozikazu)<11) { for(i=0;i<mozikazu;i++) { m2[i]=m1[i]+start; } m2[i]='\0'; } printf("文字列2:%s\n",m2); return; } どうか教えてください><

  • 【VBA】 文字列の中から指定の文字列を取り出す

    VBAで文字列から指定の文字のn番目からn+1番目までの文字列を取り出すことは可能でしょうか? A1セルに下記の文字列があった場合、「1番目の半角スペースから2番目の半角スペースまでの文字列」を取り出したいのです。 5 53 00 8R この場合、53を取り出したいというわけです。 また、可能でしたら「最後の半角スペースから文字列の最後まで」を取り出す方法も教えていただけるとありがたいです。 この場合は8Rとなります。 InStr関数を使えばできるかもと思ったのですが、できそうなものが思い浮かびません。 どなたか教えていただけませんでしょうか。 よろしくお願いいたしますm(_ _)m

  • 文字列検索で

    よろしくお願いします。 文字列検索instr関数で、特定文字(スペース)でない文字を検索したいのですが、どのようにしたらいいですか? instr関数では、できないのでしょうか? たとえば、 文字列" osietegoo "  →  3 文字列"    situmon"  →  7 スペースでない文字が出現する位置を知りたいです。 instr(文字列,"o")ではなく、" "ではない、、、としたいのですが、できますか?

  • Excel関数を使って、対象文字が検索文字列でn番目に出現した位置を知りたい

    どうもお世話になります。 Excel関数を使って以下の検索を行いたいのですが、可能でしょうか。 例)以下のような表があったとします。  A B C D E F G 1 0 0 1 1 0 0 0 2 1 1 0 1 0 0 0 ⇒○(例えば1)行目を検索し、□(例えば0)が△(例えば3)回目に出てくる位置を返す。 【答え】E1 表の中の文字列は、数字でなく色々な文字(ABとか)を使ってもいいです。 OracleのInstr関数のような使い方と言えばよいでしょうか。 できればマクロは使いたくありません。 Lookup、match、index関数など色々試しましたがダメでした。 ご教授のほどよろしくお願いします。

  • 変数内の文字列にある最後の「"」位置を調べたい。

    変数myStrに格納されている文字列に幾つか含まれる文字「"」のうち、最後の「"」が文字列の何文字目に有るか出したいです。 InStr(1,myStr,""") 普通にInstrを使うと最初の文字位置を返してきます。 また「"」は"""になってしまいます。

  • バネの問題

    (i)一つ目の質問 質量Mの原子N個がaの等間隔で並び、各原子がバネ定数Kのバネで結ばれている1次元格子を考えます。 1番目の原子の平衡位置を原点にとると、n番目の原子の平衡位置はnaとなる。 と教科書に書いてありました。 n番目の原子の平衡位置はa(n-1)ではないでしょうか? (ii)二つ目の質問 1番目から2番目、3番目とバネで結ばれていて、最後のN番目の原子と1番目の原子もバネで結ばれていると考えます。 このとき、n番目の原子の平衡位置からの変位をu_nとします。 教科書に、u_n=u_n+Nとあるんですが、これは、一周して元に戻れば変位は同じでなければならないということなんでしょうか? .

  • LENGTH関数

    こんばんわ! オラクルマスターシルバーに向けて勉強中です! 以前も質問しました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=481071 さて、また翔泳社のオルクルマスター教科書Silverの中の記述について質問があります。 LENGTH関数の使い方について、 LENGTH(NAME) NAME='オラクルマスター'の時、NAMEがVARCHAR2(20)の時は、結果は8、CAHR(20)の時は結果は12とあります。 CHAR型は、指定したバイト吸うに満たない場合は1バイトの空白文字を埋める、とあるので、8文字+1バイトで答えは9じゃないんですか? 正しい答えは8+4=12となってますが、なんで4なんでしょう?? この4はどこから出てきたのでしょう? どなたか教えてください!よろしくお願いします!

  • C言語での文字列ソート動作について

    任意の文字列を入力し、その文字列を昇順にソートするプログラムを作ったのですが、入力する文字の文字数が大きく異なると期待した結果が得られません。 文字数が少なくなったり、他の配列の文字が混ざったりと言う結果に成ってしまっています。 何が原因か分からない状態です。 以下にサンプルを記載させて頂きますので、助言よろしくお願いします。 /*----------------------------------------- 入力例 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BBBBBBBBBBBBBBBB AAAAAA -----------------------------------------*/ #include <stdio.h> #include <string.h> #include <stdlib.h> void swapc(char *cx , char *cy){ char tmp[100]; strcpy(tmp, cx); strcpy(cx, cy); strcpy(cy, tmp); } int main(){ char *num[100]; char str_tmp[100]; //文字列一時格納 int moji_cnt; //入力した文字列のカウント int n , m; // 文字列入力処理開始 printf("文字列を入力してください\n"); for( moji_cnt = 0 ; moji_cnt != 3 ; moji_cnt++){ scanf("%s", str_tmp); *(num+moji_cnt) = (char *)malloc(sizeof(char) * (strlen(str_tmp)+1)); //メモリ確保 strcpy(*(num+moji_cnt), str_tmp); } puts("\n"); // 文字数ソート処理 for(n = 0 ; n < moji_cnt-1 ; n++){ for(m = 1 ; m < moji_cnt-n ; m++){ if(strcmp(*(num+n) , *(num+n+m)) > 0){ swapc(*(num+n) , *(num+n+m)); // 文字列入れ替え } } } puts("\n"); for(n = 0;n != moji_cnt;n++){ printf("%s\n" , *(num+n)); } free(num); }

  • Excel VBA こういう関数を作りたい

    Excel VBAにてこういう関数を作りたいのです。 SInstr(検索する文字列,検索する文字,何番目) INSTRでは一番最初の位置しか返してもらえないので、任意の見つかった場所の位置を返して欲しいのです。 例: SInstr("あいうえおかうえきうえ","うえ",3) 10を返す 2つめくらいのならinstrで見つかった場からネストして+1すればいいんですが、4つめ,5つめという物もあるのです。 当方頭が悪いので思いつきませんでした。 頭の良い方、どういう関数を書いていいか教えていただけないでしょうか?