[英]How to initialize a char*[] array?
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數組作為地圖元素來幫助解決方案,但是,當我將str [n] [40]聲明為as時,我最終搞砸了map.insert函數str,system as,(有人可以解釋為什么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 ++中,人們很少需要先做new
和delete
; 相反,現代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
而不是使用new
和delete
。 並且應該使用std::string
而不是char *
作為映射鍵。 您會驚訝地發現,最終結果將更小,更易於閱讀和理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.