字串陣列重新排序的問題
阿新 • • 發佈:2018-12-18
也是同一天的面試題。
給定一個數組"aa bb cee ee a",使用int SawpWords(char *str)排序之後str的新順序為"a aa bb cee ee";同時題中重點說明了防止記憶體洩漏問題。
也是沒有完全寫好,真的是手寫程式碼難呀,還是基礎不滿分。
回來之後認真研究了一下,把最終程式碼寫出來了。
void AddNewElementToList(list<char*> &lchr, char *ch) { for (auto itor = lchr.begin(); itor != lchr.end(); ++itor) { if (strcmp(ch, *itor) < 0) { lchr.insert(itor, ch); return; } } lchr.push_back(ch); return; } int SwapWords(char *str) { if (str == NULL) return -1; list<char*> lchr; int len = strlen(str) + 1; char *buff = new char[len]; if (buff == NULL) return -1; memset(buff, 0, len); char *temp = str; int index = 0; while (*temp != '\0') { if (*temp == ' ') { if (strlen(buff) == 0) { ++temp; index = 0; memset(buff, 0, len); continue; } char *newbuff = new char[strlen(buff) + 1]; memset(newbuff, 0, strlen(buff) + 1); strcpy(newbuff, buff); AddNewElementToList(lchr, newbuff); memset(buff, 0, len); index = 0; } else { buff[index++] = *temp; } ++temp; } if (index != 0) { char *newbuff = new char[strlen(buff) + 1]; memset(newbuff, 0, strlen(buff) + 1); strcpy(newbuff, buff); AddNewElementToList(lchr, newbuff); memset(buff, 0, len); index = 0; } delete[] buff; buff = NULL; memset(str, 0, strlen(str)); temp = str; for (auto itor = lchr.begin(); itor != lchr.end(); ++itor) { for (int i = 0; i < strlen(*itor); ++i) { temp[index++] = (*itor)[i]; } auto tempitor = itor; tempitor++; if (tempitor != lchr.end()) { temp[index++] = ' '; } } return 0; } void main() { int len = 15; char *ch = new char[len]; memset(ch, 0, len); strcpy(ch, " aa bb cee ee a "); int iret = SwapWords(ch); printf("iret=%d,(ch=%s)\n", iret, ch); return; }