2 Stimmen

C++: Wie konvertiere ich eine Zeichenkette in eine Fließkommazahl, bei der sich das Anfangszeichen ändern kann?

Ich habe diese Art von Input:

x4.9
x.25
C400

Wie lässt sich das erste Zeichen am besten weglassen und in Float umwandeln?

2voto

Justin Ardini Punkte 9530
#include <iostream>

...
char c;
float f; 
std::cin >> c >> f;

std::cin >> c liest ein Zeichen von der Standardeingabe und speichert das Zeichen in c und std::cin >> f liest und speichert einen Float von der Standardeingabe. std::cin >> c >> f ist gleichbedeutend mit std::cin >> c; std::cin >> f;

Sie können eine Schleife wie oben bilden, um eine Reihe von Eingängen zu lesen. cin überspringt standardmäßig Leerzeichen, so dass die Zeilenumbrüche kein Problem darstellen.

2voto

Remy Lebeau Punkte 498719

Sie können sscanf() verwenden, z. B:

#include <stdio.h>

float f; 
char *str = "x4.9"; 

if( sscanf(str, "%*c%f", &f) == 1 )
{
    // use f as needed ...
}

0voto

sbi Punkte 211669

Ihre Eingabe ist zeilenorientiert, so dass Sie vielleicht zuerst Zeilen lesen und diese dann verarbeiten möchten:

// Beware, brain-compiled code ahead!
void process_line(std::istream& is);

void read_input(std::istream& is)
{
  while(is.good()) {
    std::string line;
    //is >> std::ws;            // might want to allow leading whitespace
    std::getline(is,line);
    if(is && !line.empty()) {
      std::istringstream iss(line); 
      process_line(iss);
      if(!iss.eof())            // reading number failed
        break;
    }
  }
  if(!is.eof()) // reading failed before eof
    throw("input error, read_input() blew it!");
}

void process_line(std::istream& is)
{
  char ch;
  double d;
  is >> ch >> d/* >> std::ws*/; // trailing whitespace usually often is acceptable
  if(!is.eof())                 // should be at the end of line
    return;
  process_number(ch,d);         // I don't know whether ch is important
}

Die Fehlerbehandlung könnte verbessert werden, aber das sollte ein Anfang sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X