c ++程序,在char *数组中查找char *字的类型

时间:2013-05-01 14:32:37

标签: c++ arrays char word match

我有一个搜索数组的程序来查找单词匹配

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; 
  }
 }

它有效,但我想知道

  1. 当我更改部分时,为什么它不起作用:string search;char *search=new char;char search[4];它从未找到单词
  2. char* word("Dog");string word("Dog");之间有什么不同。

1 个答案:

答案 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"的构造函数。反过来,构造函数将分配一个单独的缓冲区,以复制作为参数传递的原始字符串文字。