search; for(int n=0;nw-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:18:37 26 4
gpt4 key购买 nike

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

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"); 有什么区别。

最佳答案

第一个问题:

a) why it doesn't work when I change the part

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

search == mywords[n]

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

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

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

第二个问题:

b) what's the different between char* word("Dog"); and string word("Dog");

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

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

关于在 char* 数组中查找 char* 类型的 c++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com