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

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

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

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

Q&A

2回答

843閲覧

文字列か数値か判断したい。

hoshi1996

総合スコア53

C++

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

0グッド

0クリップ

投稿2021/09/29 02:34

与えられた変数の型を判断したいです。
調べても与えられた文字列が数値を含むかどうかや数値だけで構成されているかなどが出てきました。
(std::isdigitで文字列が数値だけで構成されているかわかる)

与えられた変数の型が実数、整数、文字列と判断するためにはどうしたら良いでしょうか。
(与えられた変数が文字列かどうか判断できれば良いです。)

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

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

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

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

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

int32_t

2021/09/29 02:36

C++でしたら変数の型は決まってますよね? テンプレートの話ですか?
fana

2021/09/29 03:09

「変数が文字列である」とはどういう状況を言うのか? という定義の説明が必要そうな…
BeatStar

2021/09/29 03:13

条件次第かも。 1. 『123,Hello』のように数字が含まれているが、std::atoi関数では失敗するようなデータはどうなる想定か 2. 整数として使う場合の型は何か。 ただし、整数の場合を考慮しなくていいならそれでもいい 3. どういう風に使う予定か。 templateの引数かなんかでその都度変わるのか、ユーザ入力によるもので文字列として受け取って…等 少なくともこの3つは気になります。 それによって方法がガラリと変わるので。
BeatStar

2021/09/29 03:15

質問は編集できるので、編集してください。
BeatStar

2021/09/29 03:24

もう一つあった。 4. 与えられるデータはどのように渡されるか。WinAPI等で別のソフトから送られる系か、コマンドライン引数としてなのか、コンソールからなのか、GUI(WinAPIだとEDITとか)からなのか。つまり『元のデータは文字列でいいのか』ですね。 場合によってはchar型配列でも、文字列ではなく整数配列扱いだったりするし。
episteme

2021/09/29 10:42 編集

"123." は文字列? 実数? 整数? "2.3.4" は? "2e-3"は? ... まずは判定基準を規定してくださいな。
thkana

2021/09/29 13:01

変数の型というのは例えばint a;であればaは整数型、string s;であればsは文字列型、というような話なのですが... きっと、「文字列の内容が数値を表しているのかそうでないのか」という話じゃないかと思いながら。
WoodenHamlet

2021/09/30 00:43

voidでアドレス渡された後何にキャストしたいのかわからない的な…?
fana

2021/09/30 05:13

char *p; //未初期化のローカル変数 とかいうのがあったとして, それが何かしらの紆余曲折を経て「型がわからん」状態になったとして… そっからどうにかして型が char* だとわかったとして→それは「文字列」なのか? とかいう…
ardin

2021/09/30 06:47

簡単なソースを提示してほしいところです。 日本語交じりでもいいからやりたいこと/聞きたい部分をC++ぽく記載してみてください。
matukeso

2021/09/30 15:24

「型を与える」んだからtemplateの話でtemplate<typename T> void f(T v)なfのなかでvって整数、浮動小数、文字列どーれだ、みたいな話なのかなー
guest

回答2

0

質問が間違っています。

C++ の変数宣言は「型名 変数名;」であり、コードを書いた時点で変数の型は確定しています。

質問したいことは、char配列に入っている文字列か、string型の変数の値の文字列が
実数か、整数か、それ以外の文字列かという判定をしたいということでしょう。

とりあえず、次のコードで十分か、それともこんなことができないなどのコメントをください。

C++

1#include <iostream> // cin, cout, endl 2#include <string> // stoi, stod 3using namespace std; 4 5int main() 6{ 7 string s; 8 for (;;) { 9 cout << ">> "; 10 if (!(cin >> s)) break; 11 size_t j; 12 int i = stoi(s, &j); 13 if (s.c_str()[j] == '\0') 14 cout << "整数 " << i << endl; 15 else { 16 double d = stod(s, &j); 17 if (s.c_str()[j] == '\0') 18 cout << "実数 " << d << endl; 19 else 20 cout << "数値以外の文字列 [" << s << "]\n"; 21 } 22 } 23}

投稿2021/09/30 05:02

kazuma-s

総合スコア8224

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

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

0

std::type_infoを使って、返ってきたものを任意に判定すれば目標を達成できるかと思います。

投稿2021/09/29 08:45

ardin

総合スコア546

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問