質問するログイン新規登録

回答編集履歴

3

文面の重複を修正

2020/04/29 11:30

投稿

SIGMATURE
SIGMATURE

スコア6

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `std::cin`と`std::string`を利用する場合はすでに回答がついています通り、`std::getline`を使用して一行まるごと読み込むのがよいと思います。その際、`'a'`~`'z'`と`'A'`~`'Z'`がそれぞれ連続しているかどうかはすでに指摘がある通り処理系によるため、`cctype`にある`std::islower`、`std::isupper`、`std::tolower`、`std::toupper`を使うようにしましょう。
4
4
 
5
- あくまで一文字ずつ読み込みたい、でも空白文字と改行は飛ばしたくない場合、C言語よろしく`cstdio`にある`std::getchar`を使う方法があります。改行のみを終了条件とするのであれば、以下の条件でループを回してやればよいでしょう。ただし、`std::getchar`の戻り値は`int`ですので、一旦`int`で受け取って、出力時には`std::putchar`を使うか、`std::cout`に突っ込む際に`static_cast<char>(ch)`等で文字型にキャストする必要があります。ループ条件はエラー処理を考えなければ以下のようにすればよいでしょう。
5
+ あくまで一文字ずつ読み込みたい、でも空白文字と改行は飛ばしたくない場合、C言語よろしく`cstdio`にある`std::getchar`を使う方法があります。ただし、`std::getchar`の戻り値は`int`ですので、一旦`int`で受け取って、出力時には`std::putchar`を使うか、`std::cout`に突っ込む際に`static_cast<char>(ch)`等で文字型にキャストする必要があります。ループ条件はエラー処理を考えなければ以下のようにすればよいでしょう。
6
6
 
7
7
  ```cpp
8
8
  #include <cstdio>

2

説明の修正

2020/04/29 11:30

投稿

SIGMATURE
SIGMATURE

スコア6

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `std::cin`と`std::string`を利用する場合はすでに回答がついています通り、`std::getline`を使用して一行まるごと読み込むのがよいと思います。その際、`'a'`~`'z'`と`'A'`~`'Z'`がそれぞれ連続しているかどうかはすでに指摘がある通り処理系によるため、`cctype`にある`std::islower`、`std::isupper`、`std::tolower`、`std::toupper`を使うようにしましょう。
4
4
 
5
- あくまで一文字ずつ読み込みたい、でも空白文字と改行は飛ばしたくない場合、C言語よろしく`cstdio`にある`std::getchar`を使う方法があります。改行のみを終了条件とするのであれば、以下の条件でループを回してやればよいでしょう。ただし、`std::getchar`の戻り値は`int`ですので、一旦`int`で受け取って、出力時には`std::putchar`を使うか、`std::cout`に突っ込む際に`static_cast<char>(ch)`等で文字型にキャストする必要があります。ループはエラー処理を考えなければ以下のようにすればよいでしょう。
5
+ あくまで一文字ずつ読み込みたい、でも空白文字と改行は飛ばしたくない場合、C言語よろしく`cstdio`にある`std::getchar`を使う方法があります。改行のみを終了条件とするのであれば、以下の条件でループを回してやればよいでしょう。ただし、`std::getchar`の戻り値は`int`ですので、一旦`int`で受け取って、出力時には`std::putchar`を使うか、`std::cout`に突っ込む際に`static_cast<char>(ch)`等で文字型にキャストする必要があります。ループ条件はエラー処理を考えなければ以下のようにすればよいでしょう。
6
6
 
7
7
  ```cpp
8
8
  #include <cstdio>

1

表現の誤りの修正

2020/04/29 09:48

投稿

SIGMATURE
SIGMATURE

スコア6

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  はじめに、`ch`に初期値が入っていませんので、初回の`while`条件の動作が未定義になることに注意してください。
2
2
 
3
- `std::cin`と`std::string`を利用する場合はすでに回答がついています通り、一行読み込むだけなら`std::getline`を使用して一行まるごと読み込むのがよいと思います。その際、`'a'`~`'z'`と`'A'`~`'Z'`がそれぞれ連続しているかどうかはすでに指摘がある通り処理系によるため、`cctype`にある`std::islower`、`std::isupper`、`std::tolower`、`std::toupper`を使うようにしましょう。
3
+ `std::cin`と`std::string`を利用する場合はすでに回答がついています通り、`std::getline`を使用して一行まるごと読み込むのがよいと思います。その際、`'a'`~`'z'`と`'A'`~`'Z'`がそれぞれ連続しているかどうかはすでに指摘がある通り処理系によるため、`cctype`にある`std::islower`、`std::isupper`、`std::tolower`、`std::toupper`を使うようにしましょう。
4
4
 
5
5
  あくまで一文字ずつ読み込みたい、でも空白文字と改行は飛ばしたくない場合、C言語よろしく`cstdio`にある`std::getchar`を使う方法があります。改行のみを終了条件とするのであれば、以下の条件でループを回してやればよいでしょう。ただし、`std::getchar`の戻り値は`int`ですので、一旦`int`で受け取って、出力時には`std::putchar`を使うか、`std::cout`に突っ込む際に`static_cast<char>(ch)`等で文字型にキャストする必要があります。ループはエラー処理を考えなければ以下のようにすればよいでしょう。
6
6