No.6ベストアンサー
- 回答日時:
> 自分の力でこのプログラムを書き直して、画像のような結果を出すことができませんでした。
ん?
いや、#4のプログラムは修正済みですよ。そのまま打てばよろしい。
良く見れば#2のプログラムから「既に変わってる」のが分かると思うんですが。
#4のプログラムをそのまま打って下さい。そうすれば画像の通りになるでしょう。
> もしよろしければ書き直した場合のプログラムと解説をお願いしてもよろしいでしょうか
#4のプログラムにコメントつけていきます。
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
int main(int argc, char* argv[]) {
// コマンドライン引数で受け取った文字列の配列の長さ(argc)のベクタを用意する。
std::vector<std::string> birds(argc);
// 入力される文字列の為の「容器」を用意する。
std::string name {};
// コマンドライン引数はCで言う「文字配列」なので、それをC++のstringへと変換する。
for (int i = 1; i < argc; i++) {
birds[i] = std::string(argv[i]);
}
// ユーザー入力を受け取る
std::cin >> name;
/* std::any_of はユーザー入力で得たstringがbirdsと名付けられたstringのベクタに含まれてるかどうか調べる => https://cpprefjp.github.io/reference/algorithm/a …
返り値は「発見」した時1、見つからなかった場合は0となる。
この結果を用いて三項演算子( https://acceliv.com/2021/05/clang-ternary-operator )で出力用文字列を選ぶ。
結果、std::any_ofが1を返せば「一致しました」、0を返せば「一致しませんでした」が選ばれる。 */
std::cout << (std::any_of(birds.begin(), birds.end(), \ // この辺改造
[&](const std::string& elem) \
{ return elem == name; }) ? \
"一致しました。" : "一致しませんでした。") << std::endl;
}
No.9
- 回答日時:
> Microsoft Visual Studioを使ってやっているのですが、目的の単語の入力ができないんですよね。
となるとそれはVisual Studioの問題でしょう。
DOS窓かPowerShellで試したらどうなりますか?
ザーッと検索かけてみると、Visual Studio系でC++プログラムを開発する際、プログラム内でcin使ってる時に「入力を受け付けない」って事象がチラホラ書かれてるんですが、その現象ですかね。
まぁ、だから面倒でもDOS窓かPowerShellを別に立ち上げて、作ったプログラムを走らせてみるか、Visual Studio内でターミナル(端末)走らせてそっちでプログラム動かすか、とか言う手になるんじゃないかしらん。
もうこの辺なると、全然プログラミング自体とは関係ない話に突っ込んでるんですが。
参考ページを貼っておくので、該当する現象と照らし合わせて見て下さい。
Visual Studio 開発者コマンド プロンプトと開発者用 PowerShell:
https://docs.microsoft.com/ja-jp/visualstudio/id …
【C++】[VSCode]Code Runnerで標準入力(cin)のプログラムを実行する:
https://www.l08084.com/entry/2019/12/09/203814
再度C++でのcinの問題:
https://social.msdn.microsoft.com/Forums/vstudio …
No.8
- 回答日時:
> ./a.out (a.out) メジロ キジバト オナガ と入力すると一致しませんでした。
と出てきてしまうのですが、どうしたらいいのでしょうか。それこそ、スクショ撮って貼ってくれれば嬉しいんですが。
どうなってんだかハッキリ分かるんで。
ちなみに、僕の写真で
./a.out メジロ キジバト オナガ
って先頭に./が付いてるのは使ってるPCのOSがLinuxだからです。OSの要請でそうなってる。
Windowsならフツーに
a.out メジロ キジバト オナガ
と端末で打って(メジロとキジバトとオナガの間にはキチンと半角スペースが入る)、その後目的の単語を入力すればいい筈なんですがね。
あと、考えられるのが
1. ソースコードの打ち間違い
2. 使ってる端末(DOS窓/PowerShell)の文字コードがおかしい
って可能性があるんですが、どうなんだろう。
No.7
- 回答日時:
「\」について勘違いする人がひょっとするといるかもしれないので指摘しておく.
「\」にはいろいろな意味があるが #2 のように使う場合には
その (0個以上の空白につづく: C++23) 「直後」の改行とともに消え去って次の行と連結する
という効果を持つ. だから, 「長い行」を短く切るために使うことができる... んだけど, ここでは行を切っても全く問題なく処理されるので, 実はここの「\」に意味はない. この手の「\」が本質的に要求されるのは「プリプロセッサ処理の都合上 1行にしなければならない」場合に限られる (「1つのトークンをぶちぶち区切って複数行にばらまく」という頭のおかしい場合にも影響するけどこれは「本質」ではない).
あと, 規格上は
「\ の (あとに 0個以上の空白があってその: C++23) 直後に改行がある」場合に連結する
ことになっているので, #4 ないし #6 は規格違反.
No.4
- 回答日時:
> このプログラムの中のどこかに鳥の名前を入力すればよいのでしょうか。
コマンドライン引数やってないの?
単にプログラム(例えばコンパイルしたらa.outだったとして)に引数として鳥の名前をテキトーに複数与えればいいだけ、です。
プログラムの起動例(プログラム起動時に複数の鳥の名前も入力する):
a.out メジロ キジバト オナガ
> 鳥の名前が入力した鳥の一致したら「一致しました。」一致しなかったら「一致しませんでした。」と出したいのですが、どうしたらよいでしょうか
一部分改造して下さい。
// ここから
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
int main(int argc, char* argv[]) {
std::vector<std::string> birds(argc);
std::string name {};
for (int i = 1; i < argc; i++) {
birds[i] = std::string(argv[i]);
}
std::cin >> name;
std::cout << (std::any_of(birds.begin(), birds.end(), \ // この辺改造
[&](const std::string& elem) \
{ return elem == name; }) ? \
"一致しました。" : "一致しませんでした。") << std::endl;
}
No.3
- 回答日時:
> このプログラムの中にある¥は何を表しているのでしょうか
改行用途です。
プログラムの一行がやたら長くなるのを避ける為、「ここでプログラムの途中だけど改行しますよ」と教える為に使います。
そうすれば、コンパイラが「改行」を無視して「以降も継続して一行になってる」と解釈してくれます。
No.2
- 回答日時:
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
int main(int argc, char* argv[]) {
std::vector<std::string> birds(argc);
std::string name {};
for (int i = 1; i < argc; i++) {
birds[i] = std::string(argv[i]);
}
std::cin >> name;
std::cout << std::boolalpha << \
std::any_of(birds.begin(), birds.end(), \
[&](const std::string& elem) \
{ return elem == name; }) << std::endl;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VisualStudio2005を使っています。
-
C++での標準関数の位置は?
-
DirectXのD3DXVECTOR3
-
C++でEXEを作成してCGI-BINで動...
-
C++で、環境変数の読み込み方を...
-
Haru PDF Library
-
構文エラーが出ているのですが...
-
switch文のエラーについて
-
std::map の const 修飾について
-
wrl.hはどこで手に入れますか
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
std::set<int> で、ある値が何...
-
「Aに対するBの割合」と「Aに対...
-
ウィンドウハンドルがメッセー...
-
プログラムでの数字につく”f”の...
-
ある商品のロス率を5%見込み、...
-
10進数からN進数に変換するプロ...
-
O(n log n)について2
-
ループを途中で抜けたいのですが。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
なぜ、C++の標準ヘッダをインク...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
【C++】ヘッダ内でstringを格納...
-
snprintfが使用できない。
-
enumの値から定義名を文字列化...
-
#include "fstream.h"
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
C++での <iostream.h>と<iostre...
-
VC++で文字列から任意の文字を...
-
#defineの使い方について
-
wstringの主力
-
vc++の使い方について
-
std::map の const 修飾について
-
string型のフォーマット書式指...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
おすすめ情報
まだ全然できていないんです。
std::vector<std::string> birds;の中にどうやって入れるのかもわからないし、特定のものを探し出すのもわかっていないです。
このプログラムの中にある¥は何を表しているのでしょうか
ありがとうございます。いい勉強になりました。
このプログラムの中のどこかに鳥の名前を入力すればよいのでしょうか。
それと鳥の名前が入力した鳥の一致したら「一致しました。」一致しなかったら「一致しませんでした。」と出したいのですが、どうしたらよいでしょうか
改造というのは付け足すのですか?それとも書き直すのですか?
本当に申し訳ありません。ここまで教えていただいてヒントまで出していただいたにもかかわらず自分の力でこのプログラムを書き直して、画像のような結果を出すことができませんでした。
頭が悪くてすいません。
もしよろしければ書き直した場合のプログラムと解説をお願いしてもよろしいでしょうか
./a.out (a.out) メジロ キジバト オナガ と入力すると
一致しませんでした。と出てきてしまうのですが、どうしたらいいのでしょうか。
Microsoft Visual Studioを使ってやっているのですが、目的の単語の入力ができないんですよね。
a.out メジロ キジバト オナガ
一致しませんでした。
コードも間違いはないはずなんですが、
画像は張りたいのですが、ずっと読み込み中のままで張れません。ごめんなさい