繁体   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