1

我有一个程序可以搜索一个数组来找到一个单词匹配

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;tochar *search=new char;char search[4];它永远找不到单词
  2. char* word("Dog"); 和 有什么不同string word("Dog");
4

1 回答 1

2

第一个问题:

a) 为什么当我更换零件时它不起作用

当您使用char*时,表达式:

search == mywords[n]

正在比较两个类型的指针char*,而不是这些指针指向的实际以零结尾的字符串。

std::string另一方面,当您使用时,将operator ==选择接受std::string对象和const char*指针的重载,并执行正确的字符串比较。

此外,请记住,您总是必须使用delete分配的对象new,否则您将发生内存泄漏。std::string这只是使用更可取的另一个原因。

第二个问题:

char* word("Dog");b)和有什么不同string word("Dog");

在第一种情况下,您正在初始化一个指向word字符串文字的第一个字符的指针"Dog"- 请注意,类型word应该是const char*; 而不是char*; 这种隐式转换在 C++03 中已弃用,在 C++11 中是非法的。

在第二种情况下,您正在构造一个word类型的对象并将输入中的字符串文字std::string传递给的构造函数。反过来,构造函数将分配一个单独的缓冲区来复制作为参数传递的原始字符串文字。"Dog"std::string

于 2013-05-01T14:34:50.113 回答