如何实现一个函数,将一个字符串转化成各种类型
怎么实现一个函数,将一个字符串转化成各种类型
例如如下伪方法,但是
怎么修改上面代码能运行正确或其他实现方式?
------解决方案--------------------
boost 中有一个 lexical_cast 就是完成这个功能的.
只不过类型是模板参数, 不是字符串, 比如:
int x = boost::lexical_cast<int>("123");
float v = boost::lexical_cast<float>("456.43");
std::string z = boost::lexical_cast<std::string>(234);
其实原理也非常简单, 就是源类型输出到流中, 再从流中读取目标类型.
------解决方案--------------------
例如如下伪方法,但是
#include<stdio.h>
#include<stdlib.h>
[xxxx type] get_value(char * str, char * type)
{
if(strcmp(type, "int") == 0)
{
return atoi(str);
}else if(strcmp(type,"float") == 0)
{
return atof(str);
}
}
int main()
{
char *x = "33.01";
float t=0;
//t = atof(x);
get_value(x, "float");
printf("%f\n", t);
}
怎么修改上面代码能运行正确或其他实现方式?
------解决方案--------------------
boost 中有一个 lexical_cast 就是完成这个功能的.
只不过类型是模板参数, 不是字符串, 比如:
int x = boost::lexical_cast<int>("123");
float v = boost::lexical_cast<float>("456.43");
std::string z = boost::lexical_cast<std::string>(234);
其实原理也非常简单, 就是源类型输出到流中, 再从流中读取目标类型.
------解决方案--------------------
#include <stdio.h>
#include <string.h>
void *get_value(char * str, char * type) {
static int i;
static float f;
static double d;
if (strcmp(type, "int") == 0) {
sscanf(str,"%d",&i);
return &i;
} else if (strcmp(type,"float") == 0) {
sscanf(str,"%f",&f);
return &f;
} else if (strcmp(type,"double") == 0) {
sscanf(str,"%lf",&d);
return &d;
}
return NULL;
}
int main() {
char *x = "33.0123456789";
void *pv;