将字符串数组中的char转换为float

时间:2017-05-01 12:34:03

标签: c++ string casting char

我正在研究一个从坐标用户那里获取字符串输入的项目。 输入的例子:

"Polygons = [(1, 1), (4, 1), (4, 5), (3,5), (1, 5); (5,3), (3, 4), (6, 4), (6, 12), (3, 12)]"

我正在做的其中一个功能是检查最小/最大X,这显然是“(”之后的任何数字,然而,困扰我的问题是转换后的内容(进入浮点数以便在计算中使用它)和数字比较。

    #include <iostream>
    #include "string"
    #include <stdlib.h>
    #include <cstdlib>
    using namespace std;
    //Using a constant string for testing
    string Polygon_Input = "Polygons = [(1, 1), (4, 1), (4, 5), (3,5), (1, 5); (5,3), (3, 4), (6, 4), (6, 12), (3, 12)]"; 
    string Operation;
    float Min_X = 9999;
    int main()
    {

        getline(cin, Operation);

        if (Operation == "Minimum_X")
        {
            for (int i; i <= Polygon_Input.length(); i++)
            {
                if (Polygon_Input[i] == '(')
                {

                   float X = Polygon_Input[i + 1];
                   if (X < Min_X)
                   {
                       Min_X = X;
                   }

                }

            }
            cout << Min_X;
        }

这不起作用,它总是打印出49作为Min_X

我也尝试了一次修改相同的代码,但仍然无效。

    if (Polygon_Input[i] == '(')
    {

        string X_As_String = Polygon_Input.substr(i + 1, i + 1);
        float X = atof(X_As_String.c_str());
       if (X < Min_X)
       {
           Min_X = X;
       }

1 个答案:

答案 0 :(得分:-1)

首先,您的代码中存在一些问题。

  

float Min_X = 9999;

必须的最小值必须在列表中。将第一个元素初始化为最小值,并将其与其余元素进行比较。

  

if(X

值X为int,而Min_X为浮点数。不要将int与float进行比较。声明为float,然后如果您想要整数,则转换为。

  

for(int i = 0; i&lt; = Polygon_Input.length(); i ++)

注意<=。它应该是<

现在您的问题的解决方案是

//#include <limits> // no need for this 
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstdlib>
using namespace std;
//Using a constant string for testing
string Polygon_Input = "Polygons = [(1, 1), (4, 1), (4, 5), (3,5), (1, 5); (5,3), (3, 4), (6, 4), (6, 12), (3, 12)]"; 
string Operation("Minimum_X");
//float Min_X = 9999; ?????? Why
float Min_X;
bool flag(true);

int main()
{
  //getline(cin, Operation); // commented out for test

  if (Operation == "Minimum_X")
  {
      for (int i=0; i < Polygon_Input.size(); i++)
      {
          if ( Polygon_Input[i] == '(' )
          {
             // extract X values (i.e. the first co-ordinate of a point )
             std::string temp = Polygon_Input.substr(i+1, Polygon_Input.find_first_of(",",i)-i-1 );
             // convert strig to float 
             float X = std::stof(temp); 

             // store first element and compare it with the rest
             if(flag){
                 Min_X = X;
                 flag=false;
             }

             // int X = Polygon_Input[i + 1] - '0'; ????? What is this?
             if (X < Min_X)
             {
                 Min_X = X;
             }

          }

      }
      cout <<  Min_X << endl;
  }
  return 0;
}

输出

1

列表中的最小X值。此代码也处理浮点值(即(3.45,4))。尝试不同的值进行检查。