題目:有一段文本,將文本中的所有單詞,存放到一個字符指針數組中(要求每個單詞內存恰好)。
創新互聯是網站建設專家,致力于互聯網品牌建設與網絡營銷,專業領域包括做網站、成都做網站、電商網站制作開發、微信小程序開發、微信營銷、系統平臺開發,與其他網站設計及系統開發公司不同,我們的整合解決方案結合了恒基網絡品牌建設經驗和互聯網整合營銷的理念,并將策略和執行緊密結合,且不斷評估并優化我們的方案,為客戶提供全方位的互聯網品牌整合方案!第一種做法
char c[] = " asd afil kjgl rip kjgdr gds sdg gs ";
char b[10] = {0};
char *a[10] = {NULL};
int i = 0, j = 0,k = 0; //i使字符不斷后移,j用來標識指針a,k用來標識中間字符數組b;
while (1) {//把字符串的'\0' 作為if判斷的條件,避免遇到\0不在判斷
if (c[i] != ' ' && c[i] != '\0') {
b[k++] = c[i++];
continue; //提高效率,當進行此if判斷時,就不在進行一下if判斷
}
if ((c[i] == ' ' || c[i] == '\0') && k != 0) {
//k判斷是否有字符賦給b數組,沒有的話意味著前面是空空格,就不在需要進行判斷,提高運行效率
b[k] = '\0'; //給數組b加上\0 ,結束字符
a[j] = malloc(strlen(b) + 1); //為指針開辟空間
strcpy(a[j], b); //b是首地址,a[j]也是首地址,函數具有復制功能,如:%s
k = 0;
j++;
}
if (c[i] == '\0') { //把while中的\0判斷移到可以先判斷\0的情況
break;
}
i++;
}
for (int i = 0 ; i < j ; i++ ) {
printf("%s\n", a[i]); //int a = 10; int *b = null; b = &a; *b = 10;
free(a[i]); //* 具有指向功能,
a[i] = NULL;
}
第二種做法
char str[] = " a41 a1421 b3511 b b c c c c dddddd jkthku";
//2.如何存儲一個單詞?
char tempStr[20] = {0}; //存儲文本中的一個單詞
//3.如何存儲堆區空間的地址?
char *p[255] = {0};
//4.如何查找單詞,并且將對應的單詞存放到臨時數組中?
int i = 0; //標識str字符串中字符的下標
int j = 0; //標識tempStr字符串中字符的下標
int k = 0; //標識指針數組中元素的下標.
while (1) {
if (str[i] != ' ' && str[i] != '\0') {
//當獲取到的元素不為空格時,將它存儲到臨時數組tempStr中.
tempStr[j++] = str[i];
} else if (j != 0) {
//當遇到空格,或者遇到\0時.單詞的存放結束
tempStr[j] = '\0'; //最后一個元素補上\0
//動態計算所需堆區空間的大小,將地址存放到對應的字符指針數組元素中
p[k] = malloc(strlen(tempStr) + 1);
//將臨時數組tempStr中字符串拷貝到對應堆區空間上.
strcpy(p[k], tempStr);
k++;
j = 0; //存儲下一單詞時,又從數組的第一個字符開始.
}
//當讀取到\0時,字符串讀取完畢,跳出循環
if (str[i] == '\0') {
break;
}
i++; //移動到str數組中的下一個元素
}
for (int i = 0; i < k; i++) {
printf("%s ", p[i]);
free(p[i]);
p[i] = NULL;
}
第三種做法
char str[50] =" qwo shi shui nishi hhdj";
char temp[20] = {0};
char *p[10] = {0};
int count = 0;
int d = 0,i = 0,index = 0,h = 0;
while (str[i] != '\0') {
if (str[i] != ' ') {
count ++;
i ++;
index = i - count;
}
if (str[i] == ' ' || str[i] == '\0' ){
if (count != 0) {
int k = 0;
for (int j = index; j < i;j ++) {
temp[k] = str[j];
k ++;
d = k;
}
temp[k] = '\0';
printf("%s\n",temp);
p[h] = malloc(count + 1);
strcpy(p[h], temp);
h ++;
count = 0;
}
i ++;
}
}
for (int i = 0; i < h; i ++) {
printf("%s ",p[i]);
free(p[i]);
p[i] = NULL;
}
第四種做法
char a[] = " The end of the World Cup does not mean the end of international competition in Brazil this year";
char *p[100] = {0}; //記錄單詞
char temp[100] = {0}; //臨時記錄單詞
int i = 0; //記錄a[]數組元素的位置
int j = 0; //記錄單詞的個數
int k = 0; //記錄temp[]數組中臨時單詞的字母個數(元素位置)
int count = 0;
while (a[i] != '\0') {
if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) {
count++;
temp[k] = a[i];
k++;
} else if (k != 0) {
temp[k] = '\0';
k = 0;
p[j] = malloc(sizeof(char) * count + 1);
strcpy(p[j], temp);
printf("%s ", p[j]);
free(p[j]);
p[j] = NULL;
j++;
count = 0;
}
if (a[i + 1] == '\0' && a[i] != ' ') {
temp[k] = '\0';
k = 0;
p[j] = malloc(sizeof(char) * count + 1);
strcpy(p[j], temp);
printf("%s ", p[j]);
free(p[j]);
p[j] = NULL;
}
i++;
}
over
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享名稱:動態分配內存輸出文本中的單詞的四種做法-創新互聯
當前鏈接:http://vcdvsql.cn/article40/iiheo.html
成都網站建設公司_創新互聯,為您提供小程序開發、網站維護、網站建設、關鍵詞優化、云服務器、靜態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯