簡體   English   中英

如何在 C++ 中將字符串分配給 unsigned char[]

[英]How to assign string to unsigned char[] in c++

我很難理解類型轉換,我試圖通過將string的內容分配給unsigned chars數組來提高我的理解。 我希望下面的代碼打印true ,但它沒有。

unsigned char a[10]={0,1,2,3,4,5,6,7,8,9};
        string b="5";
        if(a[5]==(unsigned char)atoi(b.c_str())){
               cout<<true<<endl;
  }

我錯過了什么?

如果您確定您的字符串b只有一個字符:

char c = b[0];

就這樣。

atoi不提取字符,而是將數字內容解析為整數。

也許轉換為字符串進行比較會更好:

#include <iostream>
#include <string>

int main() {
    unsigned char a[10]={0,1,2,3,4,5,6,7,8,9};
    std::string b="5";
    std::cout<<std::boolalpha<<(std::to_string(a[4])==b)<<std::endl;
    std::cout<<std::boolalpha<<(std::to_string(a[5])==b)<<std::endl;
    return 0;
}

http://ideone.com/9cvce4

如果您試圖打印出true ,那么您的示例代碼有一個或多個問題。 有多少取決於您如何嘗試這樣做。 如果您將文本與其他文本進行比較,我的前兩點適用。 如果您嘗試將文本轉換為數字並比較數字,請忽略它們。

unsigned char a[10]={0,1,2,3,4,5,6,7,8,9}; // 1
        string b="5";
        if(a[5]==(unsigned char)atoi(b.c_str())){ // 2
               count<<true<<endl; // 3
}

1) 雖然這會產生一個無符號字符數組,但它們不會是文本值。 該數組中的值是前 10 個ASCII 字符,而不是打印時產生“0”到“9”的字符。 可以使用以下代碼將這些字符放入數組中:

    unsigned char a[10]={'0','1','2','3','4','5','6','7','8','9'}; 

同樣,這僅適用於您嘗試比較文本數據的情況。 如果您嘗試轉換為數字並將此數組中的條目與該數字進行比較,您將需要原始數組。

2)你是正確的a[5]將訪問的第六元件a 如果要比較文本值而不是數字值,則只需訪問字符串的第一個元素進行比較。 前提是您知道字符串的大小至少為 1 個元素。 由於您在此代碼上方定義了它,這很好,但是在用戶輸入的情況下,您需要檢查。 這種比較的正確語法,正如 deviantfan 所說,是a[5] == b[0] ,因為strings上的[]運算符將返回一個char

同樣,僅當您比較文本值時,以上內容才適用於您的答案。 如果您要比較數值,則原始代碼是正確的。

3) 您沒有在true周圍加上引號。 雖然這會編譯,甚至打印一些東西——除非滿足一些條件,否則你不太可能在編碼生涯的早期遇到這種情況,否則它不會是true 您可能想輸入的是“真”,這將使輸出打印為真。 另外,你想要cout ,而不是count

這是一個示例的鏈接,該示例將字符串和(修改后的)字符數組作為文本數據進行比較。 如果您正在比較數字數據,那么您的代碼唯一錯誤的是 3)。

暫無
暫無

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

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