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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

2回答

4915閲覧

競技プログラミングの問題でコンパイルエラーになってしまう

sumikko6210

総合スコア138

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

1クリップ

投稿2018/01/08 17:18

###前提・実現したいこと
競技プログラミングの問題のコンパイルエラーを直したい。

###発生している問題・エラーメッセージ
手元のVisual Studioではうまく出力できるのですが、
AtcoderのオンラインジャッジでCE(コンパイルエラー)となってしまいます。

###該当のソースコード

C++

1#include <iostream> 2#include <string> 3#include <vector> 4#include <algorithm> 5#include <map> 6#include<cstdio> 7#include<functional> 8using namespace std; 9 10int main() 11{ 12 string S; 13 14 cin >> S; 15 16 transform(S.begin(), S.end(), S.begin(), tolower); 17 S[0] = toupper(S[0]); 18 19 cout << S << endl; 20 21 return 0; 22}

###補足情報(言語/FW/ツール等のバージョンなど)
該当する問題
https://beta.atcoder.jp/contests/abc011/tasks/abc011_2

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

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

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

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

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

guest

回答2

0

tolowerがマクロで実装されていた場合、件のerrorが予想されます。
transform(S.begin(), S.end(), S.begin(), [](char ch) -> char { return tolower(ch);});
ならイケるかもです。

投稿2018/01/08 23:01

episteme

総合スコア16614

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

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

0

ベストアンサー

transform(S.begin(), S.end(), S.begin(), ::tolower);

これでgcc/clangともに動作を確認しました

// using namespace std; using std::cin; using std::cout; using std::endl; using std::string;

ならば通るのでusing namespaceの副作用のようですね


std::tolower
::tolower
この解決が上手くいかないらしい

投稿2018/01/08 22:59

編集2018/01/08 23:43
asm

総合スコア15147

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

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

asm

2018/01/08 23:01

https://wandbox.org/ gcc/clangでコンパイルエラー時のエラー発生行を調べたい時に便利です。
episteme

2018/01/09 00:07 編集

へー... g++は tolower だけじゃ両者が区別できない(同一視できない、かな?)てーことスか。 明示的に #include <cctype> すれば解消すんのかしら?
asm

2018/01/09 02:03

transformがどう定義されてるかヘッダを見てみたら template<typename _InputIterator, typename _OutputIterator, typename _UnaryOperation> _OutputIterator transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __unary_op) これじゃどっち使えばいいのか推定はできませんね
episteme

2018/01/09 03:12

えーと... だったら 素で ch = tolower(ch); てやっただけでエラーになるてことか。
asm

2018/01/09 04:08

いえ、その場合は実引数から推定が可能です。 int(*lower_func_ptr)(int) = tolower; は可能ですが、 auto lower_func = tolower; は不可能です。
sumikko6210

2018/01/09 07:21

丁寧なご回答ありがとうございました。 using namespaceの副作用に気を付けます。 ベストアンサーにさせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問