[英]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;
}
如果您試圖打印出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.