gpt4 book ai didi

c++ - 如何初始化 char*[] 数组?

转载 作者:行者123 更新时间:2023-11-30 02:31:43 24 4
gpt4 key购买 nike

int main(){
int n;
cin>>n;
char *str[40];
str=new char [10000][40]; //I don't know how to initialize this array
std::map<char*,int> system;
int i,j;
//solving Question 4C @ Codeforces
for(i=0;i<n;i++){
cin>>str[i];
}
for(i=0;i<n;i++){
int count=0;
for(std::map<char*,int>::iterator iter=system.begin();iter!=system.end();iter++){
if(strcmp(iter->first,str[i])==0){
count=++iter->second;
}
else if(strcmp(str[i],iter->first)>0){
break;
}
}
if(count==0){
system[str[i]]=1;
cout<<"OK"<<endl;
}
else{
char *strint;
strint=new char[5];
strint=convert(count);
strcat(str[i],strint);
cout<<str[i]<<endl;
}
}

问题:http://codeforces.com/problemset/problem/4/C

我正在寻找一种方法,可以将 char 数组作为 map 的一个元素来帮助解决这个场景,然而,当我将 str[n][40] 声明为 str、系统为 时,我最终搞砸了 map.insert 函数,(有人可以解释为什么 map.insert(str[i],1) 在这种情况下不起作用吗?澄清这些概念会很好)或者在这种情况下,未能初始化 char*str[40] 数组。

我想知道这样做的合法方法是什么?

最佳答案

char *str[40];
str=new char [10000][40]; //I don't know how to initialize this array

str 是一个数组。您可以为数组中的值赋值,但数组本身不能赋值。您可能正在尝试这样做:

char *str[40];

for (size_t i=0; i<40; ++i)
str[i]=new char [10000];

不过,在现代 C++ 中,很少需要首先执行 newdelete;相反,现代 C++ 代码使用容器。说到容器:

std::map<char*,int> system;

这不会带来任何好处。 std::map 按字面意思比较键值。所以:

char *foo1=new char[40];

strcpy(foo1, "foo");

system[foo1]=0;

char *foo2=new char[40];

strcpy(foo2, "foo");

auto iter=system.find(foo2);

你认为这里的find()会找到这个元素吗?当然不是,因为它是不同的指针值。

虽然使用原始指针作为键的映射是有效的 C++,但如何正确使用它们并不是很明显。

总而言之,你应该花更多的时间研究和学习如何使用各种容器。在这里,应该使用 std::vector 而不是乱用 newdelete。并且应该使用 std::string 而不是 char * 作为映射键。您会惊讶地发现最终结果会更小且更易于阅读和理解。

关于c++ - 如何初始化 char*[] 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321218/

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