Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用[]访问字符串元素会打印随机结果_C++_String - Fatal编程技术网

C++ 使用[]访问字符串元素会打印随机结果

C++ 使用[]访问字符串元素会打印随机结果,c++,string,C++,String,因此,作为学校项目的一部分,我正在制作一个中间平方散列函数,我很困惑我的计算机是如何从一个字符串中提取两个随机字符串元素的,而我只需要一个元素。下面是代码中的一个小示例 string squaredKey = "54756"; int middleDigit = (ceil(stringSquareKey.length()/2)); cout << squaredKey[middleDigit] << endl; // this prints out 7 as expec

因此,作为学校项目的一部分,我正在制作一个中间平方散列函数,我很困惑我的计算机是如何从一个字符串中提取两个随机字符串元素的,而我只需要一个元素。下面是代码中的一个小示例

string squaredKey = "54756";
int middleDigit = (ceil(stringSquareKey.length()/2));
cout << squaredKey[middleDigit] << endl; // this prints out 7 as expected
string temp = to_string(squaredKey[middleDigit]);
cout << temp << endl; // This prints out 55 for some reason.
我不知道到底是什么问题,但我认为这与字符串有关。如果您想查看更多代码,请告诉我。

用于将数字转换为字符串。而C++的一个不幸的事实是,字符本身也是一个数字,尽管它通常用来表示ASCII值。 什么是方[中间数字];正在做的是将ASCII值“7”而不是7转换为十进制数,即55

您应该使用接受字符和计数的std::string构造函数:

std::string temp(1, squaredKey[middleDigit]);
std::to_string将数值转换为std::string,因此其输入被视为数值。stringSquareKey.length/2给出字符值“7”,当作为数值处理时,对应于ASCII码55


因此,您的代码与string temp=to_string55相同。

Unrelated:stringSquareKey.length/2是100%整数数学。ceil在这里没有用处。该值已被截断。因为“7”!=755是字符“7”的数值