簡體   English   中英

如何初始化char * []數組?

[英]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 ++中,人們很少需要先做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 *作為映射鍵。 您會驚訝地發現,最終結果將更小,更易於閱讀和理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM