• 締切済み

ここに説明していいかわかりませんが文字列のプログラム

「h○g○s」というのがあって、それぞれ頭文字です…。 例えば、「はあがあさ」とか「はあがあし」とか「はあがいさ」とかいろいろ あるのですが、これら全てを出力した結果を知りたいです。 自分はc+のソフトとか持ってないし、知識もないのですが、どうにか全ての出力結果を出したものを得ることはできないでしょうか? hとgとsの部分には「h=はひふへほ、g=がいぐげご、s=さしすせそ」のどれかが入り、○の部分には、「あいうえお・・わをん・・ぱぴぴぺぽ・・」とか全てから一文字が入ります。 検索結果は相当になると思いますが、どうにか知りたいです。 よろしくお願いします。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.7

If MsgBox("書き込みに時間(40秒ほど)がかかりますが、よろしいですか?",vbYesNo Or vbQuestion,"確認") = vbYes Then Call MakeString("C:\sukyastさんへ.txt") MsgBox("正常に書き込みました。") End If Sub MakeString(strFile) ha = Array("は","ひ","ふ","へ","ほ") ga = Array("が","ぎ","ぐ","げ","ご") sa = Array("さ","し","す","せ","そ") table = Array( _ "あ","い","う","え","お", _ "か","き","く","け","こ", _ "さ","し","す","せ","そ", _ "た","ち","つ","て","と", _ "な","に","ぬ","ね","の", _ "は","ひ","ふ","へ","ほ", _ "ま","み","む","め","も", _ "や","ゆ","よ", _ "ら","り","る","れ","ろ", _ "わ","を","ん", _ "が","ぎ","ぐ","げ","ご", _ "ざ","じ","ず","ぜ","ぞ", _ "だ","ぢ","づ","で","ど", _ "ば","び","ぶ","べ","ぼ", _ "ぱ","ぴ","ぷ","ぺ","ぽ") Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.OpenTextFile(strFile,2,True) For Each a In table For Each b In table For Each h In ha For Each g In ga For Each s In sa objFile.WriteLine( h & a & g & b & s ) Next Next Next Next Next objFile.Close End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.6

★回答者 No.4 です。 ・興味があるので、今度は Visual Basic Script(VBS)で挑戦してみました。 ・次の回答でソースを載せますので、メモ帳などを開きコピー&ペーストして下さい。  保存ファイル名は自由ですが、拡張子だけは『vbs』にして保存して下さい。  もしも『.txt.vbs』になってしまったら普通にリネームして下さい。 ・保存した『vbs』ファイルをダブル・クリックするとダイアログが表示されますので  『はい』を選択して下さい。→私の環境では、約40秒ほどでファイルが作成されました。 ・ファイル内容は、すべての組み合わせが出力されています。  ファイル場所は『C:\sukyastさんへ.txt』です。  ファイル行数は『630,125行』⇒(71×71×5×5×5)行です。  ファイル容量は『7,561,500 バイト(7.21MB)』⇒圧縮すると『1,487,163 バイト(1.41MB)』  という結果になりました。 最後に: ・上記は Windows XP Home SP2 という環境です。他の OS で動くかは確認していません。 ・Windows 環境で VBS が動けば、次に紹介するスクリプトですべての組み合わせがファイルに  出力されます。 ・以上。おわり。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_Jis"> <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/JavaScript"> <SCRIPT LANGUAGE="JavaScript"> <!-- table = [ /* 71種類 */ 'あ','い','う','え','お', 'か','き','く','け','こ', 'さ','し','す','せ','そ', 'た','ち','つ','て','と', 'な','に','ぬ','ね','の', 'は','ひ','ふ','へ','ほ', 'ま','み','む','め','も', 'や','ゆ','よ', 'ら','り','る','れ','ろ', 'わ','を','ん', 'が','ぎ','ぐ','げ','ご', 'ざ','じ','ず','ぜ','ぞ', 'だ','ぢ','づ','で','ど', 'ば','び','ぶ','べ','ぼ', 'ぱ','ぴ','ぷ','ぺ','ぽ' ]; function Sub( a, b, ha, ga, sa ){ document.write( ha, table[a], ga, table[b], sa ); document.write( '<BR>' ); } function Main( a, b ){ var ha = ['は','ひ','ふ','へ','ほ']; var ga = ['が','ぎ','ぐ','げ','ご']; var sa = ['さ','し','す','せ','そ']; var h, g, s; document.write( '<FONT COLOR=#0000FF><B>h[', table[a], ']g[', table[b], ']s</B></FONT><BR>' ); for ( h = 0 ; h < ha.length ; h++ ){ for ( g = 0 ; g < ga.length ; g++ ){ for ( s = 0 ; s < sa.length ; s++ ){ Sub( a, b, ha[h], ga[g], sa[s] ); } } } document.write( '<HR>' ); } //--> </SCRIPT> <TITLE>組み合わせ</TITLE></HEAD><BODY><HR> <SCRIPT LANGUAGE="JavaScript"> <!-- Main( 0, 0 ); Main( 0, 1 ); Main( 0, 2 ); Main( 0, 3 ); Main( 0, 4 ); Main( 0, 5 ); Main( 0, 6 ); Main( 0, 7 ); Main( 0, 8 ); Main( 0, 9 ); /* つづく */ Main( 0, 68 ); Main( 0, 69 ); Main( 0, 70 ); //--> </SCRIPT> </BODY> </HTML>

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★ちょっと面白いので JavaScript で挑戦してみました。 ・次の回答でソースを載せますので、メモ帳などを開きコピー&ペーストして下さい。  拡張子は『html』として保存してダブル・クリックすると  h[あ]g[あ]s  h[あ]g[い]s  h[あ]g[う]s  h[あ]g[え]s  h[あ]g[お]s  h[あ]g[か]s  h[あ]g[き]s  h[あ]g[く]s  h[あ]g[け]s  h[あ]g[こ]s     :  h[あ]g[ぷ]s  h[あ]g[ぺ]s  h[あ]g[ぽ]s  の13ブロック(1625個)が出力されます。 ・ソースの下にある『Main』という部分に2つの数字がありますが、ここを変更すると組み合わせが  変ります。→サンプルとして『Main( 0, 0 );』~『Main( 0, 9 );』と『Main( 0, 68 );』~  『Main( 0, 70 );の13行があるので、上記の出力が13ブロック(1625個)出力されたのです。 ・この引数は 0~70 までの数値を指定しますので、71×71=5041の組み合わせがあります。  一度では出力できませんので、数値部分を変更してから『F5』キーを押して更新して下さい。 ・これでブラウザですべての組み合わせを表示できます。→大変ですが…。 ・なお『あ』~『ん』までが 71 種類あるので上記の数値部分が 0 ~ 70 になります。もしも、  小さな『ぁ』~『ぉ』などが必要ならばソースの部分に文字を追加します。  この場合の組み合わせの数は、5×5×5×83×83=861,125=86万個です。 ・以上。おわり。

全文を見る
すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

とりあえずrubyで書いてみました。 こんな感じ: H='はひふへほ'.split( // ); G='がいぐげこ'.split( // ); S='さしすせそ'.split( // ); O=<<'_EO_MARU'.gsub( /\n/, '' ).split( // ); あいうえおかきくけこさしすせそたちつてとなにぬねの はひふへほまみむめもやゆよらりるれろわをん がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ _EO_MARU i = 0;H.each{|h|O.each{|o1|G.each{|g|O.each{|o2|S.each{|s| i+=1; STDERR.print '.' if i % 10000 == 0;print h,o1,g,o2,s,"\n";}}}}} ○のところが71文字なので組み合わせ総数は630125。 実行時間は、iBook G4で約8.6秒(標準出力をファイルにリダイレクトした場合)。 結果ファイルサイズは約9.6MB(bzip2圧縮すると483KB)。 組み合わせの最後10行は以下の通り: ほぽこぺさ ほぽこぺし ほぽこぺす ほぽこぺせ ほぽこぺそ ほぽこぽさ ほぽこぽし ほぽこぽす ほぽこぽせ ほぽこぽそ 文字集合の直積を求めてるだけなので、MS-Accessあたりでクエリ一発という手も。

参考URL:
http://www.ruby-lang.org/ja/
全文を見る
すると、全ての回答が全文表示されます。
  • fire--
  • ベストアンサー率49% (146/293)
回答No.2

ブラウザを持っていれば、javascriptが使えます。 以下のページを見て、作ってみてはどうでしょう。 http://www.tohoho-web.com/js/index.htm ただ、本当に全部の組み合わせをだすのかはよく考えてから のほうが良いでしょう。 5×50×5×50×5=31万2500 です。○にどこまで文字を入れるかにより、更に組み合わせは 多くなります。

全文を見る
すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

言語はなんでしょうか。 「h○g○s」というのがあって、それぞれ頭文字です…。・・・この文字は どこに書かれているのですか。なにかのファイルに書き込まれているのでしょうか。 これは、Windowsの話でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列の置換

    JAVAであるファイル内の文字列を置換するプログラム(日本語)を作りたいのですが、 ・ ・ String h_s; FileReader h_fr = new FileReader(in_filename); BufferedReader h_br = new BufferedReader(h_fr); while(true){  h_s = h_br.readLine();  if (h_s == null){   break;  }  ●文字列を置換するプログラム● } ・ ・ ここの●文字列を置換するプログラム●にあたる適当な関数って何かありますか? たとえばperlでいうと↓みたいなものなのですが・・・ s/置換前文字/置換後文字/g よろしくお願いします。

    • ベストアンサー
    • Java
  • イラストレーター文字が重なって出力されます。

    アドビイラストレーター8.0Jで詰め設定された文字(テキストボックス使用)をレーザープリンター出力すると、文字が重なって出力されました。一文字だけ手詰めで-1000位詰めたように前の文字と二重に重なります。モニタ画面上では全く重なっていません。 詰めをはずしても、テキストボックスを広げても出力結果は同じです。手詰めやカーニング、ぶら下がり等は一切使用していません。 以上の様な状態なのですが、どう解決すればよいのでしょうか。使用フォントは新ゴM・新ゴRでのみ発生しております。他の書体では問題ありません。OSは9.1、マシンはG4MACです。

  • 文字列での判定

    ファイルポインタの勉強を始めました。 練習として「入力された文字列をsave.txtに保存するただし、endが入力された場合、ループを抜ける」というプログラムを書きたいのですが、うまくできません。結果的には aiueo,kakikukeko と二つの文字列を出力したいです。 見にくいソースですが、ご教授の方、お願いします。 #include <stdio.h> #include <stdlib.h> main(){ FILE *fp; char input[256],input2[256]; if((fp=fopen("save.txt","at"))==NULL){ fprintf(stderr,"ファイルオープンに失敗しました"); exit(1); } do{ printf("文字列を入力してください"); scanf("%s",input); scanf("%s",input2); fprintf(fp,"%s,%s",input,input2); }while(input!="end" || input2!="end"); }

  • c言語の文字列の逆順のプログラムがわかりません

    文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。

  • かぶった文字を消すプログラム

    文字列s2中の任意の文字に等しい文字をs1から除外するプログラムを以下の様に作りましたが、ビルトと入力は出来るものの、出力が出ません。何が間違っているのでしょう? #include <stdio.h> main() { int i,j,c; char s[100],t[100]; for( i = 0; (c = getchar()) != '\n'; i++){ s[i] = c; } for( i = 0; ((c = getchar()) != '\n') && (c != EOF); i++){ t[i] = c; } for( i = 0; s[i] != '\0'; i++){ for( j=0; t[j] != '\0'; j++){ if( s[i] == t[j] ){ s[i] = ' '; } } } for( i = 0; s[i] != '\0'; ++i ){ printf("%s", s[i]); } }

  • 文字列変換のプログラムについて

    こんにちは。 C言語で以下のようなプログラムを作りたいと考えているのですが、うまく実装できず困っています。 入力ファイルには、【単語(ひらがな)+Tab+その読み(音素列)】が書かれているとします。 例: あいうえお(Tab)a i u e o かきくけこ(Tab)ka ki ku ke ko ・・・ (音素は半角空白で分けられているものとします) このファイルを読み込んで、【単語(ひらがな)+Tab+単語(カタカナ)+Tab+その読み(音素列)】を別のファイルに書き込む  例: あいうえお(Tab)アイウエオ(Tab)a i u e o かきくけこ(Tab)カキクケコ(Tab)ka ki ku ke ko ・・・ というプログラムを作りたいと考えています。 アルゴリズムとして、 (1) ファイルから1行読み込む (2) Tab文字がくるまでの文字列を配列に保存(例でいう「あいうえお」の部分です) (3) Tab文字の次の文字から行末までの文字列を配列に保存(例でいう「a i u e o」の部分です) (4) (2)の1文字ずつをカタカナに変換(ASCIIコードの変換で可能?) (5) (2)(3)(4)を用いて出力用ファイルに書きこむ という流れを考えたのですが、(2)の部分でまず手こずっています。 #include<stdio.h> main(){ FILE *fin; FILE *fout; char buff[200]; char word[200]; int i=0; /*読み込み用ファイルを開く*/ fin = fopen("input.txt", "r"); if( fin == NULL ){ printf( "File open error\n" ); return; } /*書き込み用ファイルを開く*/ fout = fopen("output.txt", "w"); if( fout == NULL ){ printf( "File open error\n" ); return; } /*1行ずつ読み込む*/ /*読み込める間繰り返す*/ while(fgets(buff,200,fin) != NULL){ /*タブ文字がくるまで拾う*/ while(buff[i] != '\t'){ /*文字列を配列wordに保存*/ word[i] = buff[i]; i++; } /*保存できているかの確認*/ printf("%s",word); fclose(fin); fclose(fout); } 実行後、wordの中身が表示されるのですが、 あいうえお,(文字化け)(文字化け) というように、【,(文字化け)(文字化け)】という謎の文字がついてしまいます。 また、入力ファイルの中身が2行以上でも、 あいうえお,(文字化け)(文字化け) あいうえお,(文字化け)(文字化け)・・・ というように、1行目の結果しか出てこないです。 どこを直せばいいのでしょうか? (というかそもそもCよりPerlとかで作ったほうがもっと楽なのかもしれないですが・・・) 教えて頂けると助かります。よろしくお願いします。

  • perl文末文字列カウントプログラム

    perl の文字列カウント こんにちは。初質問になります。perのlプログラミングについての質問です。 ある文章の「文末」の文字列をカウントし、出力するプログラムをつくりたいと思っています。 以下の文字列カウントプログラムを元に作りたいのですが、正規表現の文末指定のつけどころが恥ずかしながらわかりません。 <テキストデータ例> やまだくんはみかんを食べています!!たかしくんはりんごを食べています!! ひろしくんは好きなみかんを食べています!! ??よしこさんは嫌いなりんごを食べていますか?? かなえさんはいつもぶどうを食べています(^-^) ひろしくんはみかんが好きです(^-^)しかし、ゆうじくんはみかんは好きではありません(^-^) ひろみさんはみかんとぶどうは嫌いです!!しかし、りんごは好きです。 たとえば上のテキストデータを読み込み 文末のビックリマーク、クエスチョンマークの文字列を検出し 個数をカウントし出力するするようなプログラムです。 <出力結果> (^-^) 2 !! 2 ?? 1 となるようにしたいです。 以下のプログラムだと文末に限らずリストにあてはまる全ての記号がカウントされてしまいます。 @arr = qw('(^-^)','!!','??' ); $fname = "input.txt"; open(IN,"$fname") || &error("Can't open $fname"); read(IN,$buff,-s IN); close (IN); foreach (@arr){ $cnt = scalar( () = $buff =~ /$_/g ); print "$_ $cnt\n"; }

  • 文字列間の包含関係を調べるプログラム

    最近Javaを始めたばかりの初心者です。 キーボードから4つの文字列を読み込み、それらの文字列間の包含関係を調べるプログラムを作りたいのですが・・・ a,back,kick,ck と4つ入力したら、 aを含む  back backを含む  なし kickを含む  なし ckを含む  back  kick と出力する。 文字列が含まれる時の部分は以下のように作ってみたのですが、文字列が含まれない時に"なし"を1回だけ表示させる、というところが分かりません。(キーボード入力用のKeyBoard.classが別に用意してあります。) ヒントだけでも教えてもらえないでしょうか。 String[] S = new String[4]; for (int i = 0; i < 4; i++) {   S[i] = KeyBoard.readLine(); } for (int k = 0; k < 4; k++) {   System.out.println(S[k] + "を含む");   for (int j = 0; j < 4; j++) {     if (j != k) {       if (S[j].indexOf(S[k]) >= 0) {         System.out.println(" " + S[j]);       }     }   } }

  • 文字列の中に数値0が混入している場合の文字列出力法

    C言語初心者です。 宜しくお願い致します。 char ss[10]; ss[0] = 'A'; ss[1] = 'B'; ss[2] = 'C'; ss[3] = 0; /* '0' ではなく、0 */ ss[4] = 'E'; ss[5] = '0'; ss[6] = 'G'; ss[7] = '\0'; printf("%s",ss); 上記の場合、出力されるのは、ABC までだと思いますが、 数値0 の所で、出力を終了させずに、Gの所まで出力させることは できますでしょうか。 (「そもそも、なぜそんなことをしたい?」という疑問は、とりあえず横に置いておいて下さい。) なお、文字'0'の所では出力は終了しない、ということは理解しております。 つまり、数値0ではなく、文字'0'の場合には、そのまま「0」が出力される、と理解しております。 数値0 と NULL文字¥0 の所で出力は終了する、という理解のもと、 質問をさせて頂いております。 宜しくお願い致します。

  • 文字列置換

    和文・欧文混じりの文章の、アルファベット部分に*印をつけるプログラムを作成したいのですが $line=~s/([A-Za-z])/\*$1\*/g; とすると、 東京都千代田区SE を 東京都千代田区*S**E* としたいのに 東京・s*千代・c*区*S**E* のように和文部分まで化けてしまいます。 漢字の文字コードが問題だろうということまでは解るのですが、 どうやって欧文だけ置換して良いのか解りません。 よろしくお願いします。

    • ベストアンサー
    • Perl