0

私は C++ を初めて使用するので、文字列変数を数値に変換するのに助けが必要です。その人の年齢と翌年の年齢を画面に表示する必要がありますが、方法がわかりません。文字列を使用して数学を行うことはできません。では、いくつかの例を教えてください。

私はこのようにしようとしました:

  //converts F to C
  ctemp=(ftemp-32)*5.0/9.0;

  //calculates age
  age2 = age + 1 ; age2 = atof (age2.c_str()); age = atof (age.c_str());


  cout<<name<<" is "<<age<<" now, and will be " <<age2<<" a year from now.\n"<<"Its "<<ftemp<<" in "<<city<<"--- That's "<<setprecision(2)<<ctemp<<" degrees C"<<endl;

編集:

int main() { 
    int city; 
    double ftemp, ctemp,age,age2;
    string buf,name; //Ask user to enter age, name, temperature and city 
    cout<<"Enter your age\n"; 
    cin>>buf; 
    age = atof(buf.c_str()); 
    cout<<"Enter your full name please\n"; 
    getline(cin,name); 
    cout<<"Enter the outside temperature please\n"; 
    cin>>buf; 
    ftemp=atof(buf.c_str()); 
    cout<<"Enter the current city you are in\n"; 
    cin>>buf; 
    city=atoi(buf.c_str());
}
4

4 に答える 4

1

stringstreams を使用して、文字列を必要なデータ型に変換できます。

#include <sstream>
#include <string>
#include <iostream>

int main() {
  std::string num_str = "10.5";

  std::istringstream iss(num_str);

  float f_val = 0;

  iss >> f_val;

  //this will output 10.5 (as expected)
  std::cout << f_val << std::endl;

  return 0;
}

f_val文字列の値に割り当てられます。

このアプローチは、組み込みの変換チェックがあり、基本的な C++ 型のいずれでも機能するという点で推奨されます。したがって、テンプレート関数を作成してチェックを実行し、必要な型の特定の値を返すことができる場合:

#include <sstream>
#include <iostream>
#include <string>
#include <stdexcept>

template<typename T>
T ConvertStringToNumber(const std::string& str)  
{  
  std::istringstream ss(str);  
  T number = 0;  

  ss >> number;  

  if (ss.fail( )) 
  {
    throw std::invalid_argument("ConvertStringToNumber:" + str);
  }

   return number;  
}

int main(int argc, char argv[]){
  std::string num_str = "10.5";
  float f = ConvertStringToNumber<float>(num_str);

  std::cout << f << std::endl;

  return 0;
}
于 2013-08-24T19:02:02.347 に答える
1

華氏から摂氏 (摂氏) への変換については言及されていないため、無視します。

最初に書かれたように、質問は次の行について尋ねているようです:

age2 = age + 1 ; age2 = atof (age2.c_str()); age = atof (age.c_str());

宣言は表示されません。当分の間、私は事前の宣言があると仮定します:

double age, age2;

それを考えると (そして、この行ageまたはage2この行の前に他の操作がないと仮定すると)、 を に設定age2するage + 1と、未定義の値に 1 が追加され、 に格納されage2ます。次に、保存された値に変換の結果が割り当てられます...待ってください、冗談です... age2C文字列に変換して結果に適用atof()した結果。だから、おそらく私の仮定した型age2は間違っている - それは本当にstd::string? しかし、age2が文字列の場合、前の割り当てに問題があり、このage2 = atof(age2.c_str());割り当ても機能しません。同様の問題が課題にも当てはまりますage = atof(age.c_str());。ロジックは「割り当て先」にする必要がありageます。age2 = age + 1;'。

str:string s_age = "21";
double age = atof(s_age.c_str());
double age2 = age + 1;

std::cout << "Age: " << age << ", Next year: " << age2 << endl;

順序付けについて考えてみましょう。タイプについて考えてみましょう。次に質問するときは、タイプを表示してください。SSCCE ( Short, Self-Contained, Correct Example ) を作成するために必要なものを調べ、可能な場合は質問のコードを SSCCE にします。

C文字列をor atof(); C と C++ の両方でこれらの変換を行うためのより良い方法があり、特にソース文字列が.atoi()doubleintstd::string

于 2013-08-24T19:10:52.933 に答える
0
  1. 上記のコメントで述べたように、年齢と年齢にはfloatを使用します。

    float age, age2;
    // do math
    cout<<name<<" is "<<age<<" now, and will be " <<age2<<" a year from now.\n";
    
  2. Qt を C++ フレームワークとして使用し、C++ を楽しむ

    QString age("15.5");
    double temp = age.toDouble();
    
于 2013-08-24T19:03:09.537 に答える
-2
#include "iostream.h"

main() {
    float a,b,rmvivek,arni;
    char ch="123.00"; 
    a=atof(ch);
    arni=a+2*5;
    cout  << "the a value is" << arni;
}
于 2014-12-12T17:01:38.713 に答える