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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- 性病・性感染症・STD 性病検査の期間について 1 2023/03/03 23:48
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- カスタマイズ(バイク) スーパーカブ AA09 持ってます 3 2023/06/09 18:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
なぜ、C++の標準ヘッダをインク...
-
空ENTERの判別
-
指定した文字を削除したい
-
#defineの使い方について
-
snprintfが使用できない。
-
wstringの主力
-
std::map の const 修飾について
-
#define中の#のエスケープ
-
c++のvirtual関数および継承に...
-
C++ 数値データファイルから2次...
-
C++で、環境変数の読み込み方を...
-
構文エラーが出ているのですが...
-
c++ ファイルからの複素数の読...
-
string型のフォーマット書式指...
-
gccでコンパイル時のエラー
-
C++文字配列ソート関数を教えて...
-
C言語のエラーを修正したい
-
iostream インクルード時に発生...
-
_tcscat がうまくいきません(V...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
なぜ、C++の標準ヘッダをインク...
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
gccでコンパイル時のエラー
-
C言語のエラーを修正したい
-
#include "fstream.h"
-
C言語のポインターで詰まっている
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報
まだ全然できていないんです。
std::vector<std::string> birds;の中にどうやって入れるのかもわからないし、特定のものを探し出すのもわかっていないです。
このプログラムの中にある¥は何を表しているのでしょうか
ありがとうございます。いい勉強になりました。
このプログラムの中のどこかに鳥の名前を入力すればよいのでしょうか。
それと鳥の名前が入力した鳥の一致したら「一致しました。」一致しなかったら「一致しませんでした。」と出したいのですが、どうしたらよいでしょうか
改造というのは付け足すのですか?それとも書き直すのですか?
本当に申し訳ありません。ここまで教えていただいてヒントまで出していただいたにもかかわらず自分の力でこのプログラムを書き直して、画像のような結果を出すことができませんでした。
頭が悪くてすいません。
もしよろしければ書き直した場合のプログラムと解説をお願いしてもよろしいでしょうか
./a.out (a.out) メジロ キジバト オナガ と入力すると
一致しませんでした。と出てきてしまうのですが、どうしたらいいのでしょうか。
Microsoft Visual Studioを使ってやっているのですが、目的の単語の入力ができないんですよね。
a.out メジロ キジバト オナガ
一致しませんでした。
コードも間違いはないはずなんですが、
画像は張りたいのですが、ずっと読み込み中のままで張れません。ごめんなさい