2010-09-17 188 views
0
Number(string binary) 
     { 
      int raw_string_int[size]; 
      char raw_string_char[size]; 
      strcpy(raw_string_char,binary.c_str()); 
      printf("Raw String is %s",raw_string_char); 

       for (int i=0;i<size;i++) 
       { 

        raw_string_int[i] = int(raw_string_char[i]); 
        printf("%i\n",int(raw_string_char[i])); 
        if (raw_string_int[i] != 0 || raw_string_int[i] != 1) 
        { 
         printf("ERROR NOT A BINARY NUMBER\n"); 
         exit(0); 
        } 
       } 

嗨,我在命令提示符下輸入0001作爲二進制文件,但raw_string_char附加了兩個額外的數字。任何人都可以向我解釋爲什麼這是?回車是否被作爲字符引入?額外的數字被追加到字符串,不知道爲什麼?

這是我在命令提示符處獲得什麼:

./test 
0001 
Raw String is 000148 
ERROR NOT A BINARY NUMBER 

回答

1

要打印的每一個字符在raw_string_char。直到第一個零字符(即'\0',而不是0)C風格的字符串。

更改爲for (int i = 0; raw_string_char[i] != 0 && i < size; i++)

+0

沒有工作...相同的輸出。 – ChitownDev 2010-09-17 20:14:46

+0

這是真的,但不是問題的原因。 – Porculus 2010-09-17 20:15:16

9

您在第一個printf中忘記了「\ n」。 48來自第二個printf,並且是將第一個「0」(ASCII 0x30 = 48)轉換爲int的結果。

要將文本0或1轉換爲相應的整數,您需要減去0x30。

+0

我在printf語句中包含了一個\ n,似乎已經在某種程度上解決了這個問題。我現在得到原始字符串0001的正確值。但之後48打印出來,我不知道爲什麼。你可以進一步瞭解爲什麼printf語句會改變數組的值? – ChitownDev 2010-09-17 20:22:02

+0

要將文本數字轉換爲相應的整數,首選減去「0」而不是0x30。 0x30是'0'的ASCII碼;但是在切換到其他文本編碼方案時,0x30可能不起作用。 「0」更具可讀性。 – 2010-09-18 00:19:20

-2

raw_string_char永遠不會初始化,額外的字符可能是由於這一點。使用memset來初始化數組。

memset(raw_string_array, 0, size); 
+0

這不是必需的。 strcpy添加一個空終止符。 – Porculus 2010-09-17 20:16:45

+0

仍然獲得相同的輸出... – ChitownDev 2010-09-17 20:18:18

+0

Procolus的答案是正確的,我敢打賭,如果您將\ n添加到第一個printf,您將在換行符中看到48個! – display101 2010-09-17 20:32:39

2

你的假設char('0') == int(0)char('1') == int(1)只是不成立。在ASCII中,這些字符的值爲48和49.

您應該如何獲取數字字符的整數值是減去'0'而不是簡單轉換(raw_string_int[x] = raw_string_char[x] - '0';)。

雖然我認爲你有概念上的問題。該數組最後不能填滿有效值(相應的C字符串至少包含一個空終止符,它不是有效的二進制字符)。您可以使用該字符串的size()方法來確定該字符串實際包含多少個字符。當然,如果binary字符串包含size個字符或更多,那麼您冒着緩衝區溢出的風險。

如果目的是檢查輸入是否是有效的二進制數,爲什麼你不能測試原始字符串,爲什麼你會複製數據到另外兩個數組?

0

與其他人一樣,'0'被轉換爲整數48.您並不需要將C++字符串轉換爲C樣式字符串。你可以在C++字符串上使用迭代器或索引操作符[]。您還需要使用邏輯AND & &而不是邏輯OR ||在你的if語句中。

#include<cstdio> 
#include<string> 

void Number(std::string binary) { 
    for(std::string::const_iterator i = binary.begin(); i != binary.end(); i++) 
     if(*i != '0' && *i != '1') 
     { 
     printf("ERROR NOT A BINARY NUMBER\n"); 
      return; 
     } 
} 

int main() { 
    Number("0001"); 
} 
相關問題