簡體   English   中英

如何檢查double *數組?

[英]How to check double *array?

我嘗試將數據存儲在double *數組中。

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;
}

所以我可以分別使用所有數字和運算符或兩個數組接收雙數組。 我開始認為在我的情況下兩個陣列並不是一個壞主意......

在電腦上:

  • 數字存儲為位(001110101010111110001)
  • 字符/運算符存儲為位(000011101111010101101)

沒有固有的屬性可以區分彼此。 這是作為一個程序員誰規定一個給定的數據應該如何解釋。 如果丟失該信息,例如通過在同一位置存儲數字和字符,則無法恢復。

但是,您可以做的是在單獨的位值中顯式地存儲該信息(如何解釋數據)。 典型的低級構造是聯合和標志:

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

typedef struct {
    MyDataType type;
    union {
        double number;
        char op;
    };
} MyData;

現在,如果你有一個MyData類型的對象,比如x你可以通過訪問來檢查它是什么:

x.type

當你設置它的值時,你需要設置新類型和appriopriate字段。 例如,指定一個數字,它看起來像:

x.type = Number;
x.number = 124.1546

如果您使用C ++進行面向對象編程,可以使用訪問成員隱藏一些麻煩的機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM