C 如何检查双*数组?

C 如何检查双*数组?,c,arrays,types,C,Arrays,Types,我尝试将数据存储在双*数组中 double* parse_string(char *string) ... double *parsed_string = parse_string(str); 我想存储像124.1546这样的数字和像“+”这样的运算符。问题是:当这些数据在数组中时,我无法检测哪个是数字,哪个是运算符。 我已经尝试过isdigit()和isalpha(),但仅适用于char*数组。 我应该以其他方式存储数据吗 UPD:我试着做反向波兰符号。为此,我从stdin获取带有fgets

我尝试将数据存储在双*数组中

double* parse_string(char *string)
...
double *parsed_string = parse_string(str);
我想存储像124.1546这样的数字和像“+”这样的运算符。问题是:当这些数据在数组中时,我无法检测哪个是数字,哪个是运算符。 我已经尝试过isdigit()和isalpha(),但仅适用于char*数组。 我应该以其他方式存储数据吗

UPD:我试着做反向波兰符号。为此,我从stdin获取带有fgets的字符串,然后使用以下函数解析此字符串:

double* parse_string(char *string)
{
char result_digits[50][50];
char result_operators[50];
static double result_string[100];

int i = 0;
int digits_cnt = 0;
int digit_string = 0;
int operators_cnt = 0;
while (string[i] != '\n') {
    if (detect_symbol_type(string[i]) == sym_digit || string[i] == '.') {
        result_digits[digit_string][digits_cnt] = string[i];
        digits_cnt++;
    } else {
        if (detect_symbol_type(string[i]) == sym_operator) {
            result_operators[operators_cnt] = string[i];
            result_digits[digit_string][digits_cnt] = '\n';
            operators_cnt++;
            digit_string++;
            digits_cnt = 0;
        }
    }
    i++;
}
result_operators[operators_cnt] = '\n';

double result_numbers[100];
for (int i = 0; i <= digit_string; i++) {
    double result = 0;
    sscanf(result_digits[i], "%lf", &result);
    result_numbers[i] = result;
    printf("Parse result: %lf\n", result);
}

int k = 0;
for (int i = 0; i <= (digit_string + operators_cnt); i++) {
    result_string[i] = result_numbers[k];
    printf("%lf", result_string[i]);
    i++;
    result_string[i] = result_operators[k];
    printf("%c", (char)result_string[i]);
    k++;
}

return result_string;
}
double*parse_字符串(char*string)
{
字符结果_位[50][50];
char result_运算符[50];
静态双结果_字符串[100];
int i=0;
整数位数=0;
整数位_字符串=0;
int运算符_cnt=0;
while(字符串[i]!='\n'){
if(检测符号类型(字符串[i])==sym_数字| |字符串[i]=='。){
结果数字[数字字符串][数字字符串]=字符串[i];
数字_cnt++;
}否则{
if(检测符号类型(字符串[i])==符号运算符){
结果_运算符[运算符_cnt]=字符串[i];
结果数字[数字字符串][数字字符串]='\n';
运算符_cnt++;
数字字符串++;
数字\u cnt=0;
}
}
i++;
}
结果_运算符[运算符_cnt]='\n';
双结果_数[100];
对于计算机上的(int i=0;i):

  • 数字存储为位(001110101010101110001)
  • 字符/运算符存储为位(000011101111010101101)
没有任何固有属性可以区分数据之间的差异。作为程序员,您可以指定如何解释给定数据。如果您丢失了这些信息,例如,将数字和字符存储在同一位置,则无法恢复这些信息

但是,您可以做的是将该信息(数据应如何解释)显式地存储在单独的位值中。典型的低级构造是并集和标志:

typedef enum {
    Number,
    Operator,
    SomethingElse,
    ...
} MyDataType;

typedef struct {
    MyDataType type;
    union {
        double number;
        char op;
    };
} MyData;
现在,如果您有一个
MyData
类型的对象,比如
x
,您可以通过访问以下内容来检查它是什么:

x.type
当您设置它的值时,您需要设置新的类型和适当的字段。例如,分配一个数字,它看起来是:

x.type = Number;
x.number = 124.1546

如果你在C++中加入面向对象的编程,那么一个笨重的机械师可以被访问成员隐藏。

双只存储浮点数字,永远不是字符。请用你正在试图解决的实际问题来扩展你的问题。如果是这样,我的程序就很糟糕。谢谢你的评论。输入数据是什么?摆成什么样子?总是N个数字之间有N-1个运算符吗?差不多。它是char*str,看起来像1+4*3+(1-2)为什么要将
字符串存储为
双*
数组?