• ベストアンサー

Cのプログラム

A__の回答

  • A__
  • ベストアンサー率47% (22/46)
回答No.1

上に上がらない方法を考えました。 moji配列とretsu配列がソートしてあるとして、 その2種類の先頭から1つずつ取って来る。 その例では初回はretsu_11とmojiretsu_11。 数字部分を比較して、同じなら、「mojiretsu_数字」を出力。 違っていたら(moji_13とretsu_14の場合)、数字の小さい方(moji) の次の要素を取り出して数字部分を比較。(moji_14とretsu_14を比較)

関連するQ&A

  • C言語のプログラムの流れについて

    下に貼り付けたプログラムの流れを順番に教えて頂きたいです。 特にadd関数とinsert関数の中身の動きについてが分からないので教えていただきたいです。 (a,b,c,sentouなどの動きなど。) 参考にですが リスト構造を用いて、read関数で読み込んだ単語をアルファベット順にソートしてリストのセルに入れ、同じ単語はまとめてその単語と個数を順に表示するプログラムです。 1からの説明を要求して申し訳ありませんがよろしくお願いいたします。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> typedef struct moji{ char w[50]; int cnt; struct moji *next; }moji; int main(){ FILE *fp; char data[50]; moji *sentou; moji *p=NULL; if((sentou=(moji *)malloc(sizeof(moji)))==NULL){ printf("malloc error\n"); exit(1); } fp=fopen("tango.txt","r"); if((fp = fopen("tango.txt","r"))==NULL){ printf("can't open\n"); exit(1); } while(read(data,fp)){ add(data,sentou); } p=sentou->next; while(p != NULL){ printf("%s %d\n",p->w,p->cnt); free(p); p=p->next; } fclose(fp); return (0); } int read(char data[],FILE *fp){ /*1つの単語(連続したアルファベット)をdataに格納して、スペースで区切られたらそこで格納をやめ、値1を返す。再度単語を格納するときはdataを初期化し、再度1つの単語を取得する。ファイルの単語がなくなれば(EOFなら)0を返す関数read()*/ } void add(char data[],moji *sentou){ moji *a,*c; for(c=sentou;c!=NULL;c=c->next){ if(strcmp(c->w,data)==0){ c->cnt++; return; } if(strcmp(c->w,data)>0){ break; } else{ a=c; } } insert(a,c,data); } void insert(moji *a,moji *c,char data[]){ moji *b; if((b=(moji *)malloc(sizeof(moji)))==NULL){ printf("malloc error\n"); exit(1); } strcpy(b->w,data); b->cnt=1; a->next=b; b->next=c; }

  • プログラム実行中にプログラムを書き換えるには?

    実行中のプログラムの中でそのプログラムの一部を書き換えて保存するにはどうすればいいですか? 例えば次のようなプログラムの場合、このプログラムの中でTEXT("最初の文字列");の部分の文字列を別な文字列に変更しプログラムを更新したいです。 (プログラム終了後にもう一度実行すると「moji[20]=」の部分は前回実行時に書き換えた文字列が代入されているようにしたい) #include<windows.h> int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int ncmdshow){ TCHAR moji[20]=TEXT("最初の文字列"); MessageBox(NULL,moji,TEXT("文字列表示"),MB_OK); return 0; } --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • c#でのプログラムについて

    c#でのプログラムについて お世話になります。 c#初心者です。今までエクセルVBAでの簡単なプログラム経験があります。 コードファイル(CodeFile1.cs)からフォーム(Form1)を表示させるプログラム(初歩) ですでにいきづまっています。 ネットで見つけた、 「Form1 Form = new Form1();  Form.Show();」 と記述しましたら、下にあるエラー一覧で 「型または名前空間名'Form1が見つかりませんでした。usingディレクティブまたはアセンブリ  参照が不足しています。」と出ています。 なので、コードファイル(CodeFile1.cs)の上の方に 「using System.Windows.Form;」 と追加したのですが、まだエラー内容に変わりはありませんでした。 どうすればフォーム(Form1)を表示させるプログラムが出来るか どなたか、お教え頂きたく宜しくお願い致します。

  • C#で書かれたプログラムをバッチ処理

    C#で書かれたプログラムをバッチ処理を行いたいのですが,方法があまり良く分かりません. まずC#で書かれたプログラムを起動すると, 処理したいファイル名を入力するテキストボックススと, パラメータを入力するテキストボックスが表示されて, ボタンを押すと処理が始まります. 処理したいファイルが数百あるので,バッチ処理でできないものかと考えているのですが, どのようにC#のプログラムに引数を渡して処理させればいいのか分かりません. 理想としては,コマンドプロンプトから,各種値が入ったテキストファイルなんかを読み込ませて処理できればよいのですが... 十分伝えきれているのか不安ですが,宜しくお願い致します.

  • C言語でTIFファイルを読み込むプログラムを教えてください。

    C言語でTIFファイルを読み込むプログラムを教えてください。 C言語でTIFファイルを読み込むプログラムを組みたいのですが、テキストや参考書、ネットで調べてもよく分かりません。 もしお分かりになるのでしたらプログラムの一連の流れ(ソースプログラムも書いていただけるとなおさら嬉しいです)を教えていただけると助かります><

  • C++でofstreamに空白を含む文字列を<<するとそれ以降の文字が書き込まれない

    以下のようなテストプログラムを書いたのですが、 期待した動作になりません。 #include <fstream> int main() { std::ofstream ofs("C:/test.txt"); char moji[] = "aaa bbb"; ofs << moji << std::flush; ofs.close(); } テキストファイルにはaaaしか書き込まれず、bbbが無視されています。 ifstreamが空白文字までで処理をとめるのは知っていましたが、 ofstreamが書き込む際も同じなのでしょうか。 空白を含む文字列を書き込むにはどうすればよいでしょうか? よろしくお願いいたします。

  • Cの問題について。

    下の問題の時、 y、zが入力された時に暗号化された文字をa、bへ戻す方法がわかりません。 わかる方がいたら、ヒントだけでもいいので、よろしくお願いします。 適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。 例を以下に示します。作成するプログラムも同じような出力形式にしてください。 [ 例 ] 入力文字 = x 暗号化された文字 = b 復号化された文字 = x 何文字ずらすか?については、各自で適当に設定して構いません。 ただし、暗号化された文字も、英字小文字でなければなりません。 例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。 この点を工夫して下さい。 #include <stdio.h> void main(){ char moji; int a; printf("入力文字:"); scanf("%c",&moji); a=2; moji += a; printf("暗号化された文字= %c \n",moji); moji -= a; printf("複合化された文字= %c \n\n",moji); }

  • 複合プログラム についてです。

    複合プログラム 下図のような動作を行うLZ77符号の復号プログラムの???にどのようなプログラムを入力すれば完成しますか? #include<stdio.h> char Str[17]="AAAAAAAA"; ??? void main(void){ int p, max, position; char moji; while(1){ scanf("%d %d %c", &position, &max, &moji); ??? ?? 実行結果は以下のようになります。 キーボード入力→0 1 B 画面出力→AB キーボード入力→ 0 0 C 画面出力→C キーボード入力→5 3 B 画面出力→ABCB キーボード入力→3 2 C 画面出力→CAC キーボード入力→5 4 B 画面出力→CACCB キーボード入力→-1 0 A 続行するには何かキーを押して下さい・・・ となりますので、 上に書いてあるプログラムの足りない部分を教えて下さい。 よろしくお願いします。

  • c言語でのヒストグラム作成用のプログラム

    -50から500までの整数が一列に乱数で入力されたテキストファイルを読み込んで-50が何個、-49が何個、・・・、499が何個、500が何個といった感じにに出力するCプログラムが分かりません。 テキストファイルの中身は-50から500までの整数が一列に書いてあります。説明不足かも知れませんがわかる方よろしくお願いします。

  • C言語のプログラムについて質問です。

    C言語初心者で困っています。 テキストデータの上から3行分を飛ばして、4行目から読み込むようにするにはどのようなプログラムを書けば良いでしょうか? ちなみにデータは2列、100003行あります。 よろしくお願いします。