1

文字列を整数に変換しようとしています。そこから 48 を引かなければならないというようなことを先生が言ったのを覚えていますが、よくわかりません。そうすると、A の値として 17 が得られます。これは、正解の場合は 64 です。これが私のコードです。より良い方法をいただければ幸いです。

#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    string str;
    getline(cin,str);
    cout << str[0] - 48;
    getch();
}
4

4 に答える 4

1

C++ 機能のみを使用したシンプルでタイプセーフなソリューションは、次のアプローチです。

#include <iostream>
#include <sstream>

int fromString(const std::string& s)
{
  std::stringstream stream;
  stream << s;

  int value = 0;
  stream >> value;

  if(stream.fail()) // if the conversion fails, the failbit will be set
  {                 // this is a recoverable error, because the stream
                    // is not in an unusable state at this point
    // handle faulty conversion somehow
    // - print a message
    // - throw an exception
    // - etc ...
  }

  return value;
}

int main (int argc, char ** argv)
{
  std::cout << fromString ("123") << std::endl; // C++03 (and earlier I think)
  std::cout << std::stoi("123") << std::endl; // C++ 11

  return 0;
}

:fromString()文字列のすべての文字が実際に有効な整数値を形成しているかどうかを確認する必要があります。たとえば、GH1234何かがそうではなく、 を呼び出した後、値は 0 のままになりますoperator>>

編集:変換が成功したかどうかを確認する簡単な方法failbitは、ストリームの を確認することです。それに応じて回答を更新しました。

于 2013-10-31T16:12:00.000 に答える