我有一个搜索数组的程序来查找单词匹配
char *mywords []={"Dog","Cat","etc"};
string search;
cout<<"enter a word to search"<<endl;
cin>>search;
for(int n=0;n<3;n++)
{
if(search==mywords[n])
{
cout<<mywords[n]<<"found"<<endl;
}
}
它有效,但我想知道
string search;
到char *search=new char;
或char search[4];
它从未找到单词char* word("Dog");
和string word("Dog");
之间有什么不同。答案 0 :(得分:2)
第一个问题:
a)当我更改零件时它为什么不起作用
使用char*
时,表达式为:
search == mywords[n]
正在比较char*
类型的两个指针,而不是那些指针指向的实际以零结尾的字符串。
另一方面,当您使用std::string
时,会选择接受operator ==
对象和std::string
指针的重载const char*
,并执行正确的字符串比较
此外,请记住,您始终必须使用delete
分配new
个对象,否则您将遇到内存泄漏。这只是使用std::string
的另一个原因。
第二个问题:
b)
之间有什么不同char* word("Dog");
和string word("Dog");
在第一种情况下,您正在初始化指针word
以指向字符串文字"Dog"
的第一个字符 - 请注意,word
的类型应为{{1} }},而不是const char*
;这种隐含转换在C ++ 03中被弃用,在C ++ 11中是非法的。
在第二种情况下,您正在构建类型为char*
的对象word
,并将输入中的std::string
字符串文字传递给"Dog"
的构造函数。反过来,构造函数将分配一个单独的缓冲区,以复制作为参数传递的原始字符串文字。