文字入力と配列についてです。(C++)
文字入力と配列についてです。(C++)
文字入力で任意の長さの複数の文字列(例)"HFRHRFFFR"をベクター配列に入れるにはどのようにしたらいいですか?
できれば、コード付きで解説していただけると本当に有り難いです。
どなたかご回答お願いします。m(_ _)m
使用ソフト:VS2008
OS:vista
経験:始めたばかりです。
できれば、コード付きで解説していただけると本当に有り難いです。
どなたかご回答お願いします。m(_ _)m
使用ソフト:VS2008
OS:vista
経験:始めたばかりです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> vec;
vec.push_back("HFRHRFFFR");
cout << vec[0] << endl;
return 0;
}
解説するほどでも無いと思うので、分からないことがあったら聞いてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
ご回答有り難うございます。m(_ _)m
入力は固定ではなく、任意ということを伝えたかったので「h2so5」さんのような感じです。
うまく伝えきれず申し訳ないです。
ですが、最後の方の「return 0」というのが、なぜ書かれているのかわかりません。
お手数ですが、解説お願いできませんか?
駄文、長文すみません。。。
入力は固定ではなく、任意ということを伝えたかったので「h2so5」さんのような感じです。
うまく伝えきれず申し訳ないです。
ですが、最後の方の「return 0」というのが、なぜ書かれているのかわかりません。
お手数ですが、解説お願いできませんか?
駄文、長文すみません。。。
Re: 文字入力と配列についてです。(C++)
一言でいえば仕様だから。
呼び出したOSに対し、値を返すことが仕様で決められています。Windowsの場合は値が返ってきても何も利用はしていませんが、一般に正常終了の時は 0を返すと決められています。異常終了なら1を返します。
呼び出したOSに対し、値を返すことが仕様で決められています。Windowsの場合は値が返ってきても何も利用はしていませんが、一般に正常終了の時は 0を返すと決められています。異常終了なら1を返します。
non
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
int main {}と言う戻り値がintの関数ですので、戻り値を返しています。
return 0;の0は正常なら0が大体のOSの仕様だからです。
MS-DOS時代は重要な意味があったんですけどWindows時代にはあまり使われません。
ただし、C99(Cの1999年規格)とC++ではmain関数に限り、そのmain関数の戻り値の型がintであればreturn 0;があったと見なされるって規格があるので、準拠しているコンパイラであれば省略してもエラーは出ません。
return 0;の0は正常なら0が大体のOSの仕様だからです。
MS-DOS時代は重要な意味があったんですけどWindows時代にはあまり使われません。
ただし、C99(Cの1999年規格)とC++ではmain関数に限り、そのmain関数の戻り値の型がintであればreturn 0;があったと見なされるって規格があるので、準拠しているコンパイラであれば省略してもエラーは出ません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
仕様でしたか。
有り難うございます。
訊いてばかりで申し訳ないのですが、以下のエラーにおける「オペランド」といものが参考書などを見てもイマイチピンと来ないので、これの解説もしていただけると有り難いです。m(_ _)m
二項演算子 '==' : 型 'std::basic_string<_Elem,_Traits,_Ax>' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
有り難うございます。
訊いてばかりで申し訳ないのですが、以下のエラーにおける「オペランド」といものが参考書などを見てもイマイチピンと来ないので、これの解説もしていただけると有り難いです。m(_ _)m
二項演算子 '==' : 型 'std::basic_string<_Elem,_Traits,_Ax>' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
>二項演算子 '==' : 型 'std::basic_string<_Elem,_Traits,_Ax>' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
エラーを起こしたソースコードを貼ってもらえますか?
エラーを起こしたソースコードを貼ってもらえますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
こんな感じですが、エラーが出たときは、 if文の条件(&& array == )の右辺が「ダブル」クォーテーションでなく「シングル」クォーテーションでした。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
>二項演算子 '==' : 型 'std::basic_string<_Elem,_Traits,_Ax>' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
このエラーが出ないみたいです。
あと
このエラーが出ないみたいです。
あと
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
if(pos == "q0" && array == 'H')のようにすると、エラーがでますが、ここでこう書くと右辺が文字化けしてしまうのでダブルクオーテーションにしてました。m(_ _;)m
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
それは本当に型が違うからです。
文字列と文字を混同しないでください。
"文字列"
'文字'
この2つは型が違います。
文字列と文字を混同しないでください。
"文字列"
'文字'
この2つは型が違います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
そのあたりの型の違いについてかなり怪しいので、エラーが出たということですね。
参考書を見てもさらっとしか書いてなかったので、気にしてませんでした。
よろしければ、解説をお願いしてもよろしいでしょうか?m(_ _ ;)m
参考書を見てもさらっとしか書いてなかったので、気にしてませんでした。
よろしければ、解説をお願いしてもよろしいでしょうか?m(_ _ ;)m
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
違いはですね。C++には型を調べるtypeidクラスがあるので、これで比べてみてください。
"文字列"は文字配列ですね。
そして'文字'は数値なんです。
ちゃんとした参考書を読めば解説されていると思いますよ。
#include<iostream>
using namespace std;
void main(){
cout << typeid("文字列").name() << endl;
cout << typeid('文字').name() << endl;
}
そして'文字'は数値なんです。
ちゃんとした参考書を読めば解説されていると思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
提示してくださったコードを実行してみた結果、確かにcharとintでデータ型が異なりました。
参考書を見直したところ、確かにちょっとだけですが書いてありました。
では、どのようにしたら、配列と文字を比較(array == '文字')できるのでしょうか?(><;)
参考書を見直したところ、確かにちょっとだけですが書いてありました。
では、どのようにしたら、配列と文字を比較(array == '文字')できるのでしょうか?(><;)
Re: 文字入力と配列についてです。(C++)
kaka さんが書きました:では、どのようにしたら、配列と文字を比較(array == '文字')できるのでしょうか?(><;)
正確には配列の要素と文字の比較ですね。
この配列の要素は文字列ですが、なぜ、文字列と文字を比較しようとしているのでしょうか?
概念の違うものなので比較しようが有りません。(例えとしては少しおかしいかも知れませんが、身長と体重と比べているようなものです。)
"A"と'A'は同じように見えるかも知れませんが異なるものです。
kakaさんは、まず、この違いを認識することが必要でしょう。
Re: 文字入力と配列についてです。(C++)
確かにそうですね。
しかし、上記のプログラムにおいて、文字でなく文字列にして実行した場合、文字列を入力し改行を押しても何も起こらなくなるのはなぜなのでしょうか?(?ω?)
しかし、上記のプログラムにおいて、文字でなく文字列にして実行した場合、文字列を入力し改行を押しても何も起こらなくなるのはなぜなのでしょうか?(?ω?)
Re: 文字入力と配列についてです。(C++)
申し訳有りません。なにを言っているのかさっぱり分かりません。kaka さんが書きました:上記のプログラムにおいて、文字でなく文字列にして実行した場合、文字列を入力し改行を押しても何も起こらなくなるのはなぜなのでしょうか?(?ω?)
まず、上記のプログラムとはどれのことでしょうか?
「文字でなく文字列にして実行」とはどういうことでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
具体的なコードを書いていただけると、こちらにも伝わると思います。
※ 前回の投稿は文字化け(WEB文字コードの混入)しているのでご注意下さい(必ず投稿前にプレビューして確認して下さい)。
※ 前回の投稿は文字化け(WEB文字コードの混入)しているのでご注意下さい(必ず投稿前にプレビューして確認して下さい)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
どうしても文字化けが直らないので文章にてもう一度説明させていただきます。
No.9のコードからNo.9のコード中のif文の条件式であるarrayの右辺をそれぞれ「” ”」から「’ ’」に書き換えた場合
という意味でした。
下手な説明で申し訳ないです。(;ω;)
No.9のコードからNo.9のコード中のif文の条件式であるarrayの右辺をそれぞれ「” ”」から「’ ’」に書き換えた場合
という意味でした。
下手な説明で申し訳ないです。(;ω;)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
なぜ文字列から文字にしたいか分かりませんが一文字目と比較したいだけなら。
array == "H"
から
compare関数に変えるべきです。
http://www.cppll.jp/cppreference/cppstr ... ml#compare
こんな感じ。
array.compare(0,1,"H") == 0
array == "H"
から
compare関数に変えるべきです。
http://www.cppll.jp/cppreference/cppstr ... ml#compare
こんな感じ。
array.compare(0,1,"H") == 0
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
なぜ文字列から文字にしたいかというと、文字の場合でないと動いてくれなかったからです。
array.compare(0,1,"H") == 0 の括弧内の0と1のところがどういうことを表しているのかよくわからないです(@@;)
array.compare(0,1,"H") == 0 の括弧内の0と1のところがどういうことを表しているのかよくわからないです(@@;)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
先頭文字で、一文字だけって意味です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
ありがとうございます。
とりあえず、No.9のコードを以下のように書き換えてみたのですが、うまく動いてくれませんでした。
どこを間違えているのでしょうか?
また、どう書き換えればいいのでしょうか?
とりあえず、No.9のコードを以下のように書き換えてみたのですが、うまく動いてくれませんでした。
どこを間違えているのでしょうか?
また、どう書き換えればいいのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
vectorの機能とstringの機能を混同していると思われます。
array.compare(i,1,"H")
これは言うなれば
char str_array[10][10];
の配列でstr_array == 'H' とチェックしているに等しいです。
格納されている先頭文字が"H"か確認したいなら
array.compare(0,1,"H")
でうまくいくはずです。
array.compare(i,1,"H")
これは言うなれば
char str_array[10][10];
の配列でstr_array == 'H' とチェックしているに等しいです。
格納されている先頭文字が"H"か確認したいなら
array.compare(0,1,"H")
でうまくいくはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
vector配列に格納されている文字列を先頭の0~配列末尾まで順次チェックするにはどうしたらよいですか?(?へ?;)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
全文字列の1文字だけが一致するか調べるなら、
とするのが良いでしょうね。
とするのが良いでしょうね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
vector配列全体で調べるなら
となるでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
自分で動作が合っているかは分かると思いますが、自分での評価はいかがですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
「複数の文字列」を入力するためのコードなので、エンターを押せば当然次の文字列の入力待ち状態になります。kaka さんが書きました:文字入力で任意の長さの複数の文字列(例)"HFRHRFFFR"をベクター配列に入れるにはどのようにしたらいいですか?
入力待ち状態を終了するには、Ctrl+Zを押した後、エンターキーを押します。
あと、このプログラムで「複数の文字列」を入力させる意味ってないと思うんですが。
1行だけの入力では駄目なんでしょうか?
Re: 文字入力と配列についてです。(C++)
結果表示のところで、「(ある状態) (読んだ文字)→ (次の状態)」としたいのですが、「(ある状態) (入力した文字列)→ (次の状態)」 となってしまいました。
また、複数の文字列の入力ではなく、1行だけの文字列としたかったです。
また、複数の文字列の入力ではなく、1行だけの文字列としたかったです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
一行の文字列であればstringだけで十分です。
vectorも不要です。
vectorも不要です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 文字入力と配列についてです。(C++)
最初の説明で一行しか入力しないと説明が無くvectorを使うという事だったので複数行の前提でここまで進めてきました。
vector自体複数のオブジェクトを配列化するものなので、C言語の文字列処理に使うcharの配列とは役目が全然違います。
と言う事でvectorの処理を外してstringの処理だけ残せばお望みのものになると思いますが。
vector自体複数のオブジェクトを配列化するものなので、C言語の文字列処理に使うcharの配列とは役目が全然違います。
と言う事でvectorの処理を外してstringの処理だけ残せばお望みのものになると思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 文字入力と配列についてです。(C++)
説明不足申し訳ありませんでした。
おかげさまで、なんとか完成しました。
駄文、長文で本当に迷惑をおかけしました。
丁寧に説明していただき本当にありがとうございました。^^
おかげさまで、なんとか完成しました。
駄文、長文で本当に迷惑をおかけしました。
丁寧に説明していただき本当にありがとうございました。^^