传入字符串将其转化为对应的数据返回类型为
typedef struct Data_c {
void* data;
int type;
}Data;
整体代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Data_c {
void* data;
int type;
}Data;
Data* checkData(char* data);
int main() {
char data1[]="2-567";
Data* nowData=checkData(data1);
if(nowData->type==-1){
printf("Str Data:%s\n",((char*)(nowData->data)));
}
if(nowData->type==-3){
printf("int Data:%d\n",*((int*)(nowData->data)));
}
if(nowData->type==-5){
printf("float Data:%f\n",*((float*)(nowData->data)));
}
return 0;
}
Data* checkData(char* data) {
int i = 0;
int j = 0;
int pointNum = 0;
int pointIndex = 0;
int flag = 0;
int negativeFlag=1;
if(data[0]==45){
negativeFlag=-1;
data+=1;
}
while (i < strlen(data)) {
if (((data[i] > 57 || data[i] < 48)&&data[i]!=46) || pointNum>1) {
flag = 1;
break;
}
if (data[i] == 46) {
pointIndex = i;
pointNum += 1;
}
i += 1;
}
Data* nowData = (Data*)malloc(sizeof(Data));
if (flag == 0) { //this data is Number;
if (pointNum == 1) { //this data is float or double
float bigNum=0;
int mulNum=1;
for(j=0;j<strlen(data);j++){
if(j>pointIndex){
mulNum*=10;
bigNum=bigNum*10+(data[j]-48);
continue;
}
else{
if(j==pointIndex){
continue;
}
bigNum=bigNum*10+(data[j]-48);
continue;
}
}
bigNum=bigNum/mulNum*negativeFlag;
float* nowNum=(float*)malloc(sizeof(float));
*nowNum=bigNum;
nowData->data=(void*)(nowNum);
nowData->type=-5;
}
else { //this data is int
int bigNum = 0;
for (i = 0; i < strlen(data); i++) {
bigNum = bigNum * 10 + (data[i] - 48);
}
bigNum*=negativeFlag;
int* nowNum=(int*)malloc(sizeof(int));
*nowNum=bigNum;
nowData->data = (void*)(nowNum);
nowData->type = -3;
}
}
else { //this data is charArry
nowData->data = (void*)(data);
nowData->type = -1;
}
data-=1;
return nowData;
}