プログラミング初心者のためのタイトル

このQ&Aのポイント
  • プログラミング初心者がゲームのプログラムを作成する際の疑問を解決したい
  • C++言語を使用して、特定の文字を入力すると表示が変わるプログラムを作成したい
  • ハングマンのプログラムを応用して、文字の一致を調べるプログラムを作成したい
回答を見る
  • ベストアンサー

プログラミングについて質問です。

プログラミングについて質問です。 ゲームのプログラミングの一部を作っているところで たとえば H13 D5 C2 D6 H1 S12 と表示されているとき、D6とキーボードで入力すると、その文字だけ消えて、 H13 D5 C2 H1 S12 と表示しなおされる(全ての文字が消えるまで繰り返す)、というプログラミングを書きたいと思っています。 しかしどうやったらいいのかわからないので、教えていただけたら嬉しいです。 使っているのはC++言語です。 授業でハングマンのゲームをやったときに キーボード入力された文字が、配列の文字と一致するか調べる、というものをやったので それが応用できるかなと思うのですが… そのハングマンのプログラミングは #include <iostream> #include <string.h> using namespace std; void tryAndSee() { char x[100], y[100], c; strcpy(x, "hippopotamus"); strcpy(y, "____________"); cout << "character?"; cin >> c; for(int i=0;i<100;i++){ if(x[i]=='\0'){ break; } else if(x[i]==c){ y[i]=c; } } cout << y << "\n"; } main() { tryAndSee(); } です。 ほんとに初心者なので、解説付きで教えていただけると嬉しいです。 よろしくお願いします。

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

  • ベストアンサー
  • towad
  • ベストアンサー率80% (4/5)
回答No.1

1.一連の文字列を何らかのデータ構造として用意する 2.検索文字列を入力 3.入力文字列を各文字列データと比較する 4.一致した文字列データがあれば削除する 5.2に戻る ということをやれば良いと思います。 #include <iostream> #include <vector> #include <string.h> using namespace std; int main(int argc, char *argv[]) { string text[] = {"H13", "D5", "C2", "D6", "H1", "S12"}; vector<string> tlist; char input[256] = ""; for (int i = 0; i < 6; i++) { tlist.push_back(text[i]); } while (1) { vector<string>::iterator ite; for (ite = tlist.begin(); ite != tlist.end(); ) { if (ite->compare(input) == 0) { ite = tlist.erase(ite); } else { cout << *ite << endl; ite++; } } cout << "input:"; fgets(input, 255, stdin); *(strstr(input, "\n")) = 0; } return 0; }

atammok
質問者

お礼

反応が遅くなってしまいごめんなさい。 丁寧に回答いただき、本当にありがとうございました! 参考にさせていただきました。

関連するQ&A

  • webでプログラミング repl.itの利用

    Web上でC++の実行をしようとrepl.itを使いました。 しかし、C++でプログラミングを実行しようとしても exited with non-zero status というエラーが出てしまいます。 これの解決方法をお願いします。 また、単にソースがおかしいことも考えられるので載せます。 #include <stdio.h> #include <math.h> int main(){ int x,y,i; printf("xに代入する値を決めてください。x="); scanf("%d",x); for(i=0;i<x;i++){ y=y+2; } printf("y=%dです。",y); return 0; }

  • あるプログラミングでdoubleの箱が

    こんにちは、 とあるプログラミングでdoubleの箱が突然2つでてきて混乱しています。 //読み込んだ実数値は10で割りきれるか #include <cmath> #include <iostream> Using namespace std; Int main() { Double x; Cout <<"実数値: "; cin >> x; If (double m = fmod(x, 10)) { Cout<<"その値は10で割りきれません。\n"; Cout<<"剰余は"<< m << d"です。"\n"; } else{ Cout"その値は10で割りきれます" \n"; } } とあり、なぜ突然double mがでてきたのでしょうか? すみません m(__)m

  • プログラミング

    ランダムの数値を入力してその数値より大きければ正解より大きいと表示して小さければ小さいと表示し正解なら正解ともだすプログラムをつくっています 正解まで何回かかったかとも表示したいと思います 上手く実行できないのでご教授ください #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,x,y; srand((unsigned int)time(NULL)); printf("%\n",i); i=rand()%100; //0以上100以下の整数を生成 y=0; printf("1以上100以下の整数を入力してください。\n"); scanf( "%d", &x ); /* 数値を入力させる */ printf("1以上100以下の整数を入力してください。\n"); y=y+1; if( x == i ) { printf("%d回目で当たりました。\n",y); printf("%d回目で当たりました。\n",y); break; /* 無限ループ */ } else{ if ( x < i ) //printf("正解より大きいです。\n"); printf("正解より大きいです。\n"); else //printf("正解より小さいです。\n"); printf("正解より小さいです。\n"); } } //return0;

  • Cプログラミングの質問なのですが,

    Cプログラミングの質問なのですが, 以下のプログラムで正規乱数を発生させたいのですが,どこがおかしいのでしょうか? fp1のransuuはきちんとtxtで作成されています。 至急お助けください。 #include <stdio.h> #include<stdlib.h> #include<math.h> #define PI 3.141592653589793238 int main (void) { FILE *fp1,*fp2; int i,n; unsigned int x1,x2; double y1,y2; fp1=fopen("ransu.txt","r"); fp2=fopen("seikiransu.txt","w"); for(i=0;i<n;i++) { fscanf(fp1,"%lf",&x1); fscanf(fp1,"%lf",&x2); y1=sqrt(2)*sqrt(-2*log(x1))*cos(2*PI*x2); fprintf(fp2,"%lf\n",y1); } fclose(fp1); fclose(fp2); return 0; }

  • C言語の質問です。

    C言語の質問です。 C言語で、PCの時間を、キーボードで入力した好きな秒数ごとに表示するプログラムを作りたいのですが、どうしても1秒ごとになってしまいます。ここまで作ったのですが、あとどのようにすればよろしいでしょうか? #include <stdio.h> #include <time.h> #include <string.h> int a2i(char x); main() { time_t jikoku; char t[30]; int h,m,s,so=0; int x,a; printf("秒数xを入力"); scanf("%d",&x); while(1){ for(a=0;a<x;a++){ time(&jikoku); strcpy(t,ctime(&jikoku)); h=a2i(t[11])*10+a2i(t[12]); m=a2i(t[14])*10+a2i(t[15]); s=a2i(t[17])*10+a2i(t[18]); if(s!=so+a){ printf("%d:%d:%d\n",h,m,s); so=s; } } } } int a2i(char x) { return(x-'0'); }

  • プログラミングおかしいところ探してください

    #include<iostream> using namespace std; int main() { int i = 0; char a[128]; cout << "やあ" << endl; cin >> a; while (i<= strlen(a)){ if (a[i] == 'ワ'&&a[i + 1] == 'ン'){ cout << "ニャア"; i = i + 2; } else if (a[i] == 'わ'&&a[i + 1] == 'ん'){ cout << "にゃあ"; i = i + 2; } else{ cout << a[i]; i++; } } return 0; } キーボードから入力された文字に「ワン」「わん」があれば「ニャア」「にゃあ」と言い換えるプログラムを組もうとしたのですが、デバックするとエラーが出ます。 'Project2.exe' (Win32): 'C:\Users\kazuaki\Documents\Visual Studio 2013\Projects\Project2\Debug\Project2.exe' が読み込まれました。シンボルが読み込まれました。 'Project2.exe' (Win32): 'C:\Windows\System32\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\kernel32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\msvcp120d.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\msvcr120d.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 プログラム '[5180] Project2.exe' はコード 0 (0x0) で終了しました。 何がまずいのでしょうか。

  • Cプログラミングの質問です。

    方程式2.0*pow(10,-15)*pow(38.6,x)-2.73-0.909x=0の解xを二分法により求め、それを”atai=××”と表示させるプログラムを書こうと思っているのですが、エラーがでてしまい、さらにどこを直していいかわかりません。 詳しい方がおられましたら、アドバイスをいただけたらと思います。よろしくお願いいたします。 <エラー内容> 「コンパイルしています... tom.cpp .\tom.cpp(34) : error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(575): 'long double pow(long double,int)' の可能性があります。 C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(527): または 'float pow(float,int)' C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(489): または 'double pow(double,int)' 引数リスト '(int, int)' を一致させようとしているとき .\tom.cpp(34) : error C2059: 構文エラー : 'サフィックスが無効です。' .\tom.cpp(34) : error C2146: 構文エラー : ';' が、識別子 'x' の前に必要です。 ビルドログは "file://c:\Documents and Settings\satoutakaaki\デスクトップ\file\tom\tom\Debug\BuildLog.htm" に保存されました。 tom - エラー 3、警告 0」 <プログラム> #include "stdafx.h" #include <stdio.h> #include <math.h> double fx(double x); int main (void){ double x1=-1000; double x2=1000; double xn; double y; int i=0; for(i=1;i<100;i++) { xn=0.5*(x1+x2); y=fx(xn); if(y>0) {x1=x1/2+x2/2;} if(y<0) {x2=x1/2+x2/2;} i=i+1; } printf("atai=%f",xn); return 0; } double fx(double x) { double z; z=2.0*pow(10,-15)*pow(38.6,x)-2.73-0.909x; return z; }

  • プログラミングについて教えてほしいんですが・・・

    プログラミングについて教えてほしいんですが・・・ プログラミングで四則演算プログラムをやっているのですが余りの求め方がわかりません。足し算の求め方は /*lesson2.c*/ #include<stdio.h> int add(int,int); int main(){ int a,b,c; printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); c=add(a,b); printf("a+b=%d\n",c); } int add(int x, int y){ return x+y; } というやり方で求めることができたのですが、余りは上のプログラムのどこを変えたらいいのでしょうか? 誰かわかる人がいたら教えてください。お願いします。

  • プログラミングの課題で困ってます。

    正弦関数x=sintのグラフを■で描きなさい(31行程度で)。数値xに対する■の数はウインド各行に表示される しきれる範囲内で任意に定めてよい。 という課題が出ました。よくわからなくて困っています。 下記に書いてるプログラミングを参考に答えを教えていただきたいと思い、質問させていただきました。よろしくお願いします。 また、下記を参考にしなくてもよいです。 プログラミングはvisual C++ 2008を使ってます。 #include "stdafx.h" #include<stdio.h> #include<math.h> int _tmain(int argc, _TCHAR* argv[]) { double x[100]; int i , j; for(i=0; i<31; i++){ x[i]=sin(0.1*i); } // for(j=0; j<31; j++){ // printf("%lf\n",y[j]); // } for(i=0; i<31; i++){ for(j=0; j<x[i]*20; j++){ printf("■"); } printf("\n"); } return 0; }

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?