我无法访问二进制字符串中的各个字符以确定它们是否已设置,我做错了什么?或者有更简单的方法吗?这是我的代码:
#include <iostream>
#include <string>
using namespace std;
float BinToDec(const string & bin) {
short length = bin.length();
float result = 1.0f;
const char * str = bin.c_str();
for (int i = 0; i < length; ++i) {
if ( &str[i] == "1") cout << "SET" << endl << endl;
else cout << "NOT SET" << endl << endl;
}
return result;
}
int main() {
string bin = "";
cout << "Input a binary number: ";
cin >> bin;
cout << BinToDec(bin) << endl << endl;
}
答案 0 :(得分:3)
您可以直接在字符串bin
上进行迭代,无需获取const char *
,此处也不需要&
运算符,因为使用{{1}你已经取消引用并获得了[]
(这就是为什么你不应该将它与&#34; 1&#34进行比较;这不是char而是char
)
总而言之,我认为这是一种更好的方法:
string literal
此外,将长度存储在for (int i = 0; i < length; ++i) {
if ( bin[i] == '1')
cout << "SET" << endl << endl;
else
cout << "NOT SET" << endl << endl;
}
中可能现在可以使用,但存在超过short
最大值的字符串,因此您应该使用short
。
答案 1 :(得分:2)
它不适合你,因为:
"1"
进行比较,但你的子字符串将在输入的末尾终止...即可能超过1
字符。==
只比较指针值相反,只比较单个字符:
if ( str[i] == '1') cout << "SET" << endl << endl;
// ^ ^ ^
// | character literals are delimited by _single_ quotes
// no `&` required
但我不明白你为什么要使用.c_str()
;只需直接在bin
上操作,而不是创建此C字符串str
:
float BinToDec(const string& bin)
{
size_t length = bin.length();
float result = 1.0f;
for (int i = 0; i < length; ++i) {
if (bin[i] == '1')
cout << "SET" << endl << endl;
else
cout << "NOT SET" << endl << endl;
}
return result;
}
我还更正了length
的类型。
答案 2 :(得分:1)
如果您确定要使用C风格的字符串执行此操作,请更改:
if ( &str[i] == "1") cout << "SET" << endl << endl;
要
if ( str[i] == '1') cout << "SET" << endl << endl;
通过这种方式,您可以将str
的单个字符与'1'
进行比较,这是一个文字字符(而不是"1"
一个包含1个字符的字符串。
现有代码将偏移i的地址带入c_str(),这实际上与从字符i开始的字符串结尾相同,并将其与文字字符串“1”进行比较。请注意,您不能像这样进行C风格的字符串比较,因为它会比较底层指针。
答案 3 :(得分:0)
由于您尝试使用单引号检查每个字符的值,而不是双引号。
float BinToDec(const string & bin) {
short length = bin.length();
float result = 1.0f;
const char * str = bin.c_str();
char c;
for (int i = 0; i < length; ++i) {
c = str[i];
// Use single quotes and not double quotes here
if ( c == '1') cout << "SET" << endl << endl;
else cout << "NOT SET" << endl << endl;
}
return result;
}
那就是说,我认为lccarrasco的方式是你正在努力实现目标的正确方法。