• 締切済み

文字列を分割したい

fire--の回答

  • fire--
  • ベストアンサー率49% (146/293)
回答No.3

これはローマ字を分解したいんでしょうか。 たぶん、そういうプログラムはないんじゃないかなと思います。 少なくとも explode では無理です。作るしかないでしょう。 だとしたら、まずはやりたい事を明確にする必要がありますね。 拗音や撥音があった場合に、どう分解するのかなど。 それが明確になれば、アイディアを出してくれる人もでてくるかも しれません。

関連するQ&A

  • 文字列について

    昨日以下の質問をしました初心者ですが、 今自分で関数を作成しているのですが、文字列(丸数字)の文字化けにかなり苦しんでいます。 (※注※)これ以降(1)など()の中に数字を入れて記述しているものは実際のソースコード上では丸数字で記入してます。教えてgooでは丸数字が記述できないようでして… 関数の内容としては、(1)あ(2)い(3)う……このように丸数字で区切られている文字列を配列名を$dataとすると、$data[0]には「あ」、$data[1]には「い」、$data[2]には「う」が入るような関数を作成しています。 この丸数字の数は(10)まで対応させようと考えてます。 という質問をしましたが、この問題に関しては、 function bunkai($str1){ $data=explode('__SEPRATOR__',str_replace(Array("(1)","(2)","(3)","(4)","(5)","(6)","(7)","(8)","(9)","(10)"),'__SEPRATOR__',$str1)); array_shift($data); return $data; } と記述することのより解決しました。 しかし、昨日の質問を少し僕が間違えていたようで、実際には、$data[0]には「(1)あ」、$data[1]には「(2)い」、$data[2]には「(3)う」が入るような関数を作成したかったのです。で、試行錯誤しようにも方法が思いうかびませんでした。何か良い方法はないでしょうか?? ちなみに文字列は(1)あ(2)い(3)う……のように(1)から順番に始まるものもあれば(3)え(4)う…と(1)ではなく途中から始まるものもあります、なので、配列の順番を取ってきてそのまま丸数字に置き換えて挿入するという方法はダメです。 誰か文字列操作に詳しいお方、教えてもらえたらうれしいです。

    • ベストアンサー
    • PHP
  • ユニコード文字列の分割

    csvやファイルパスをカンマや'\'で分割する関数をユニコードでも 対応できるように改修していのですがやり方が分かりません。 関数のロジックはおおよそ以下の通りです。 (仕事先のセキュリティの関係でソースは持ち出せませんので概要ですが・・・) split(str, item, len, words[item][len], delimiter) char* str: 分割対象の文字列 int item:項目数(上限あり) int len:項目の文字数(上限あり) words[item][len]:文字列を分割、項目として格納する配列 char delimiter:区切り文字 int i=0, j=0; while(*str != NULL){ // 文字列を分割する処理 if(str != delimiter){ words[i][j++] = *str } else if{ words[i][j] = NULL i++; j=0; } ・・・・・・・・・ str++; } // 後処理があります VCの設定がマルチバイト対応だったので問題なかったのですが ユニコードに設定を切り替えるとパスの分割でカタカナの「ソ」 を含む文字列が正しく分割されないという事象が発生しました。 関数内の改修だけで解決する方法があるでしょうか? ある程度プロジェクトが動いているのであまり時間をかけないで 対応する必要があります。 OS: Windows7 SP1 環境: VC++ 2008 MFC

  • マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?

    素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。 以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。 .NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか? 覚えて無意味はきついので・・・ /* VC++2005でperlのようなsplit関数を実現したい 区切り文字は\r\n */ using namespace System; int main( array<String^>^ args ){ String^ str = nullptr; if (1 > args->Length ){ str = "太郎\r\n花子\\純一郎"; } else { str = args[0]; } // strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。 // $names = split /\r\n/ $str; <=※ここです。 array<String^> ^names = { "太郎", "花子", "純一郎" }; String^ name; for each ( name in names ) { Console::WriteLine("{0}", name); } return 0; }

  • 配列の中身を順番に可変長定義関数に渡すには

    好きなだけ引数が渡せる関数があり、その引数に任意の配列の中身をeval関数を使わずに一つずつ渡したいのですが、どうすればいいのでしょうか。eval関数を使った場合は以下のような感じです。 $list=array("apple","banana","orange"); function hoge(){ print_r(func_get_args()); } $arg=implode ('","',$list); eval('hoge("'.$arg.'");');//hoge("apple","banana","orange"); よろしくお願いいたします。

    • 締切済み
    • PHP
  • 配列内の値に

    preg_replaceで 配列内のスペースを<br>に置き換えてみたのですが期待しなかった結果がでたので、不思議に思い質問させていただきました。 <? //ケース1 $array[1] = "1 <br>"; $array[2] = "2 <br>"; $array[3] = "3 <br>"; $array[4] = "4 <br>"; $array[5] = "5 <br>"; $array[6] = "6 <br>"; print_r($array); ?> 上記のコードでは以下のように表示されるのですが、 Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 ) <? //ケース2 $txt = "1 2 3 4 5 6 "; $array = explode(" ", $txt); $array = preg_replace ('/\s/', ' <br>', $txt); print_r($array); ?> ケース2では以下のように表示されます。 これはどうしてなのでしょうか? もしご存知の方おられましたらどうぞよろしくおねがいいたします。 1 2 3 4 5 6

    • ベストアンサー
    • PHP
  • 配列内の文字列検索をしたい

    お世話になっております、またjavascriptで詰まってしました。現在作ってるソースは以下のイメージです。 var temp= hensuu; var list = "aa,bb,cc"; //tempがaa,bb,ccの文字を含んでいたら処理 if(list.indexOf(temp)!=-1){ //ここで何番目の要素か知りたい } という処理をしているのですがif(list.indexOf(temp)!=-1)の中で「文字列(list)に存在する」だけでなく,「区切りの何番目の要素か」も知りたいんですがそういう便利な関数か方法はあるでしょうか? list.indexOf(temp)の返す値は「文字列が見つかった場所」なのでリストの順番ではないんですよね…。 for文でひとつひとつ回すしか方法は無いのでしょうか??LIST(もしくは配列)内検索関数みたいなのがあればナイスなんですが…。分かる方、ご教授頂けたらこれ幸いです。

  • 位相(コーシー列、入門レベル)

    レポート課題なのですが、以下の問題の証明の仕方を教えてください。 問、Q(有理数全体の集合)の2つのコーシー列{an},{bn}について、    (1){an+bn}はQの中のコーシー列であることを証明せよ。  (2){an-bn}はQの中のコーシー列であることを証明せよ。 (1)は、{an}→a、{bn}→bを仮定して、任意の実数εに対して、      自然数NaとNbで、        n>Naを満たす任意のnは、|an-a|<ε/2        n>Nbを満たす任意のnは、|bn-b|<ε/2      が存在する。      そこで、        N=max(Na、Nb)      とすれば、      n>Nを満たす任意のnは|an-a|<ε/2と|bn-b|<ε/2を      満たす。      2式を足すと、        |(an-a)+(bn-b)|≦|an-a|+|bn-b|<ε/2+ε/2=ε      となる。 分かりにくいのですが、こんな感じでいいのでしょうか。 また、「Qの中の」という部分が証明できていない気がします。 (2)は、2式を引いても、不等式の右辺は変わらないと思うのですが、 (1)と同様に考えればいいのでしょうか。 何かアドバイス等あれば、教えてください。おねがいします。

  • 教えてポインタ

    例えば、以下のようなソース。 関数の中で、引数のポインタに値を入れてmainに戻す。 とても簡単なものです。 void func(int *N) {  *N=0; } main {  int  *N=1;  func(N);  printf("%d",*N) } 疑問は、ここからです。 (1)void func(int  *N) (2)void func(int*  N) (3)void func(int*  &N) 上記は、何が違いますか? なお、当方のVS2010で同じソースを作ると、 (1)の場合、エラーになります。(func関数の*N=0のところでダウン) (2)だと、OKになります。 (3)は、なに?

  • 10進数の2進数文字列変換

    10進数の2進数文字列変換 ◆開発環境 OS:Linux(Ubuntu9.10) コンパイラ:gcc4.4 言語:C ◆質問内容 ポインタ*Aに格納されている10進数を2進数の文字列に変換し、 文字配列Bに格納したい。 バッファとして*fpを準備。 webで調査した結果を以下のソースのようにアレンジしましたが、 fputc関数の処理で、プログラムが強制終了してしまいます。 何か、良い方法ございませんでしょうか。 ◆サンプルソース void Dec_conv_bit(long *A,char *B){ unsigned int bit,n; //ビット比較用 unsigned int *fp = &n; n = (unsigned int)A; for(bit = 1 << sizeof(int)*8-1; bit > 0; bit >>= 1){ fputc((n & bit)?'1':'0',fp); } sprintf(B,"%s",fp); //putchar('\n'); }

  • 思うような連想配列ができない・・

    省略して説明します。 関東,東京,神奈川,千葉 中部,愛知,静岡,岐阜 関西,大阪,兵庫,京都 というCSVデータがあり これを以下のような、連想配列にしたいのですがどうすればよいのでしょうか?? Array (   [0] => Array    (      [0] => 関東      [1] => 東京      [2] => 神奈川      [3] => 千葉    )   [1] => Array    (      [0] => 中部      [1] => 愛知      [2] => 静岡      [3] => 岐阜    )   [2] => Array    (      [0] => 関西      [1] => 大阪      [2] => 兵庫      [3] => 京都    ) ) --------------------------------- CSVデータを、feofで終端まで読み込み feofで一行ずつ取得 explodeでコンマで分解まではできるのですが 上記のような、連想配列ができません・・。 ご教授よろしくお願いします。

    • ベストアンサー
    • PHP