尝试使用 tertiary/conditional 运算符将字符串与值进行比较,但它不起作用
Trying to compare a string to a a value with tertiary/conditional operator and it doesn't work
这里只是学习C++。
#include <iostream>
#include <string>
int main()
{
char name[1000];
std::cout << "What is your name?\n";
std::cin.get(name, 50);
name == "Shah Bhuiyan" ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
}
所以我在这里写了一个程序,我在其中创建了一个变量名[100]。我使用 cin iostream 对象来获取变量 name
的输入。如果名称等于我的名字(如name == "Shah Bhuiyan" :
中所见)则输出第一件事或输出'Who are you?'
而不是输出 'Oh, it's you'
它输出 'who is this?'
为什么这不起作用?
数组没有比较运算符。
实际上在这个表达式中
name == "Shah Bhuiyan"
比较了两个指针(由于数组指示符隐式转换为指向其第一个元素的指针):第一个是指向字符数组名称第一个字符的指针,第二个是指向字符串文字的第一个字符。
由于数组和字符串文字占用不同的内存范围,因此地址比较的结果始终为 false。
您需要使用标准的 C 字符串函数 strcmp 来比较两个字符串。
#include <cstring>
//...
std::strcmp( name, "Shah Bhuiyan" ) == 0 ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
如果要使用相等运算符 ==,则使用 std::string
.
类型的对象代替字符数组
您可以使用 std::getline 读入 std::string
而不是 C 风格的 char
缓冲区。
您的代码使用了字符数组。任何使用 ==
的比较都会比较它们的内存地址。由于 name
和 "Shah Bhuiyan"
是两个不同的字符数组,因此它始终为 false。
显而易见的解决方案是使用标准库中的 c++ 字符串:
#include <iostream>
#include <string>
int main()
{
std::string name;
std::cout << "What is your name?\n";
std::getline(std::cin, name);
name == "Shah Bhuiyan" ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
}
std::string
类型定义了运算符,可以在此处执行正确的操作,并将比较每个运算符的值。
这里只是学习C++。
#include <iostream>
#include <string>
int main()
{
char name[1000];
std::cout << "What is your name?\n";
std::cin.get(name, 50);
name == "Shah Bhuiyan" ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
}
所以我在这里写了一个程序,我在其中创建了一个变量名[100]。我使用 cin iostream 对象来获取变量 name
的输入。如果名称等于我的名字(如name == "Shah Bhuiyan" :
中所见)则输出第一件事或输出'Who are you?'
而不是输出 'Oh, it's you'
它输出 'who is this?'
为什么这不起作用?
数组没有比较运算符。 实际上在这个表达式中
name == "Shah Bhuiyan"
比较了两个指针(由于数组指示符隐式转换为指向其第一个元素的指针):第一个是指向字符数组名称第一个字符的指针,第二个是指向字符串文字的第一个字符。
由于数组和字符串文字占用不同的内存范围,因此地址比较的结果始终为 false。
您需要使用标准的 C 字符串函数 strcmp 来比较两个字符串。
#include <cstring>
//...
std::strcmp( name, "Shah Bhuiyan" ) == 0 ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
如果要使用相等运算符 ==,则使用 std::string
.
您可以使用 std::getline 读入 std::string
而不是 C 风格的 char
缓冲区。
您的代码使用了字符数组。任何使用 ==
的比较都会比较它们的内存地址。由于 name
和 "Shah Bhuiyan"
是两个不同的字符数组,因此它始终为 false。
显而易见的解决方案是使用标准库中的 c++ 字符串:
#include <iostream>
#include <string>
int main()
{
std::string name;
std::cout << "What is your name?\n";
std::getline(std::cin, name);
name == "Shah Bhuiyan" ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
}
std::string
类型定义了运算符,可以在此处执行正确的操作,并将比较每个运算符的值。