一.二级指针第一种内存模型
//无测试用例写法
#include<stdio.h> #include<stdlib.h> #include<string.h> void main() { int i = 0; int j = 0; char *tmp = NULL; char *ArrayStr[] = {"cccc","aaaa","bbbb","1111"}; for (i = 0; i < 4; i++) { printf("%s\n", ArrayStr[i]); } //排序 for (i = 0; i < 4; i++) { for (j = i + 1; j < 4; j++) { if (strcmp(ArrayStr[i] , ArrayStr[j])>0) { tmp = ArrayStr[i]; ArrayStr[i] = ArrayStr[j]; ArrayStr[j] = tmp; } } } //排序后 for (i = 0; i < 4; i++) { printf("%s\n", ArrayStr[i]); } system("pause");
}
//测试用例 int printArr(char **ArrayStr,int inum) { int i = 0; for (i = 0; i < inum; i++) { printf("%s\n", ArrayStr[i]); } return 0; } int sortArr(char **ArrayStr, int inum) { int i = 0; int j = 0; char *tmp = NULL; //排序 for (i = 0; i < inum; i++) { for (j = i + 1; j < inum; j++) { if (strcmp(ArrayStr[i], ArrayStr[j])>0) { tmp = ArrayStr[i]; ArrayStr[i] = ArrayStr[j]; ArrayStr[j] = tmp; } } } return 0; } void main() { int i = 0; int j = 0; char *ArrayStr[] = { "cccc", "aaaa", "bbbb", "1111" }; printf("排序之前:\n"); printArr(ArrayStr, 4); printf("排序之后:\n"); sortArr(ArrayStr, 4); printArr(ArrayStr, 4); system("pause"); }
二.二级指针的第二种内存模型
//无测试用例 void main() { int i = 0; int j = 0; char tmp[60]; char ArrayStr[10][20] = { "cccc", "aaaa", "bbbb", "dddd"}; printf("排序之前:\n"); for (i = 0; i < 4; i++) { printf("%s\n", ArrayStr[i]); } for (i = 0; i < 4; i++) { for (j = i + 1; j < 4; j++) { if (strcmp(ArrayStr[i], ArrayStr[j])>0) { strcpy(tmp, ArrayStr[i]); strcpy(ArrayStr[i], ArrayStr[j]); strcpy(ArrayStr[j], tmp); } } } printf("排序之后:\n"); for (i = 0; i < 4; i++) { printf("%s\n", ArrayStr[i]); } system("pause"); }
//测试用例 int printArr(char ArrayStr[10][20],int inum) { int i = 0; for (i = 0; i < inum; i++) { printf("%s\n", ArrayStr[i]); } return 0; } int sortArr(char ArrayStr[10][20], int inum) { int i = 0; int j = 0; char tmp[60]; for (i = 0; i < inum; i++) { for (j = i + 1; j < inum; j++) { if (strcmp(ArrayStr[i], ArrayStr[j])>0) { strcpy(tmp, ArrayStr[i]); strcpy(ArrayStr[i], ArrayStr[j]); strcpy(ArrayStr[j], tmp); } } } return 0; } void main() { int i = 0; int j = 0; char ArrayStr[10][20] = { "cccc", "aaaa", "bbbb", "dddd" }; printf("排序之前:\n"); printArr(ArrayStr, 4); printf("排序之后:\n"); sortArr(ArrayStr, 4); printArr(ArrayStr, 4); system("pause"); }
三.二级指针的第三种内存模型
void main() { int i = 0; int j = 0; char buf[100]; char **myarray = (char **)malloc(10 * sizeof(char *)); if (myarray == NULL) { return; } for (i = 0; i < 10; i++) { myarray[i] = (char *)malloc(100 * sizeof(char));//char buf[100] if (myarray[i] == NULL) { printf("ddddde\n"); return; } sprintf(myarray[i], "%d%d%d", i, i, i); } printf("排序之前"); for (i = 0; i < 10; i++) { printf("%s\n", myarray[i]); } //排序 for (i = 0; i < 10; i++) { for (j = i + 1; j < 10; j++) { if (strcmp(myarray[i], myarray[j])>0) { strcpy(buf, myarray[i]); strcpy(myarray[i], myarray[j]); strcpy(myarray[j], buf); } } } //排序之后 printf("排序之后\n"); for (i = 0; i < 10; i++) { printf("%s\n", myarray[i]); } for (i = 0; i < 10; i++) { free(myarray); } if (myarray != NULL) { free(myarray); } system("pause"); }
//测试用例
int printArray(char **myarray,int inum) { int i = 0; for (i = 0; i < inum; i++) { printf("%s\n", myarray[i]); } return 0; } int sortArray(char **myarray, int inum) { //排序 int i = 0; int j = 0; char *tmp = NULL; for (i = 0; i < inum; i++) { for (j = i + 1; j < inum; j++) { if (strcmp(myarray[i], myarray[j])>0) { tmp = myarray[i]; myarray[i] = myarray[j]; myarray[j] = tmp; } } } return 0; } int main() { int i = 0; int j = 0; char buf[100]; char **myarray = (char **)malloc(10 * sizeof(char *)); if (myarray == NULL) { return 0; } for (i = 0; i < 10; i++) { myarray[i] = (char *)malloc(100 * sizeof(char));//char buf[100] if (myarray[i] == NULL) { printf("ddddde\n"); return 0; } sprintf(myarray[i], "%d%d%d", i, i, i); } //排序之前 printArray(myarray, 10); //排序 sortArray(myarray, 10); //排序之后 printArray(myarray, 10); //释放内存 for (i = 0; i < 10; i++) { free(myarray[i]); } if (myarray != NULL) { free(myarray); } system("pause"); }
四。两个辅助指针变量挖字符串
/* 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果 1) 以逗号分割字符串,形成二维数组,并把结果传出; 2) 把二维数组行数运算结果也传出。 strchr(“aa,aa”,’,’ ); 请自己定义一个接口(函数)。 要求1:能正确表达功能的要求,定义出接口(函数)(30分); 要求2:正确实现接口(函数),并实现功能(40分); 要求3:编写正确的测试用例。(30分)。 */
int spitStr( char *buf1, char c, char buf[10][30], int *mycount) { char *p = NULL; char *ptmp = NULL; int count = 0; int tmpcount = 0; p = buf1; ptmp = buf1; char buf2[1024]; do{ p=strchr(p, c); if (p != NULL) { tmpcount = p - ptmp; memcpy(buf[count], ptmp, tmpcount); buf[count][tmpcount] = '\0'; printf("%s\n", buf2); ptmp = p = p + 1; count++; } else { break; } } while (*p != '\0'); return 0; } void main() { char *p = "abcdef, acccd, eeee, aaaa, e3eeeee, sssss, "; char c = ','; char buf[10][30]; int ncount; spitStr(p, c, buf, &ncount); system("pause"); }
这个代码我检查了没问题,但不知道为什么最后出来的是乱码