質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2455閲覧

C++のreverse関数についての質問です

kenken77

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/07/21 02:26

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージボールドテキスト

競技プログラミングの問題で文字列のA番目からB番目までを反転させるプログラムなのですがreverse関数の二つ目の引数はなぜ S.begin()+B-1としないのですか? 幼稚な質問ですみません

該当のソースコード

c++

1#include <iostream> 2#include <algorithm> 3using namespace std; 4int main(){ 5int N,A,B; 6string S; 7cin>>N>>A>>B; 8cin>>S; 9**reverse(S.begin()+A-1,S.begin()+B);** 10cout<<S; 11 12}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/07/21 02:31

その問題が何かってのがわからんとどーにもならんと思いますが
guest

回答2

0

ベストアンサー

文字列のindex(0から始まる)の世界で考えると以下のようになります.

C++

1std::string S = "012345"; //これの[1]~[3]の範囲 "123" をひっくり返すとする. 2int start_index = 1; 3int end_index = 3 + 1; //'3'の一個後ろの'4'の位置を示すindex 4std::reverse( S.begin()+start_index, S.begin()+end_index );

A番目

とかいう言い方だと,先頭の要素を「1番目」と言うのでしょうから,

  • 「A番目」に対応するindex は,A-1
  • 「B番目」に体操するindex は,B-1

ですね.
で,後者側は範囲の終わり側の指定に使うので,↑の例のように,一個後ろを指す必要があるので,+1 します.
結果として,B-1 + 1 なので B だ,と.

投稿2021/07/21 02:36

編集2021/07/21 02:37
fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

reverse(from, to); は from以上 to未満 の範囲を反転するから。

投稿2021/07/21 03:38

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問