二级指针输入模型(三种内存模型)

一.二级指针第一种内存模型

//无测试用例写法

#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");
}
这个代码我检查了没问题,但不知道为什么最后出来的是乱码







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值