【C】FindString之华为软件训练营考试_动态创建一个两维数组
2012-03-09 20:51
381 查看
题目:输入一个字符串,含N(N<=100)个字符,字符全部为大写字母,不考虑输错的情况。设计一个程序,要求:把输入字符串的前i个(0<=i<=N-1)字符加入字符串的末尾组成新的字符串,这样就形成N个字符串了;对这N个字符串进行排序(字典序),不用删除重复项;能用序号查找字符串;
输入:N个字符的字符串及查找的序号
输出:对应的字符串
*********************
例子:
输入字符串:
BANANA
形成N个字符串:
BANANA
ANANAB
NANABA
ANABAN
NABANA
ABANAN
排序后的结果(序号1~6):
ABANAN
ANABAN
ANANAB
BANANA
NABANA
NANABA
代码(两维数组_动态创建与释放):
注:该代码虽然可以运行,但PC-LINT检查有N多bug,属于玩具程序。留待以后修改。
输入:N个字符的字符串及查找的序号
输出:对应的字符串
*********************
例子:
输入字符串:
BANANA
形成N个字符串:
BANANA
ANANAB
NANABA
ANABAN
NABANA
ABANAN
排序后的结果(序号1~6):
ABANAN
ANABAN
ANANAB
BANANA
NABANA
NANABA
代码(两维数组_动态创建与释放):
注:该代码虽然可以运行,但PC-LINT检查有N多bug,属于玩具程序。留待以后修改。
#include <stdio.h> #include <string.h> #include <stdlib.h> const int MAXINPUTSIZE=101;//输入的最大字符数 char **phead;//指向排序后的字典的首地址 char * _str;//存放输入的字符串 int StrNum;//输入字符串的字母个数 void Init() { phead=NULL; _str=(char*)malloc(MAXINPUTSIZE*sizeof(char)); StrNum=0; } int InputString() { printf("请输入字符串:"); _str=gets(_str); StrNum=strlen(_str); return 1; } void SwapTwoPart(char * OriStr,char * RestStr,int k)//把OriStr中前面k个字符挪到最后一个字符之后,形成一个新的字符串,即为RestStr { int i=0,j=k; while ('\0'!=OriStr[j]) { RestStr[i]=OriStr[j]; i++; j++; } j=0; while (j<k) { RestStr[i]=OriStr[j]; i++; j++; } RestStr[i]='\0'; } void CreateDict()//创建字典,还未排序 { int i=0; phead=(char**)malloc(StrNum*sizeof(char*)); while (i<StrNum) { phead[i]=(char*)malloc(StrNum*sizeof(char*)); SwapTwoPart(_str,phead[i],i); i++; } } void BubbleSort()//冒泡排序,大的下沉 { int i=0; int j=0; char *ppre=NULL; char *pfol=NULL; char *ptmp=(char*)malloc(StrNum*sizeof(char*)); for (i=StrNum-1;i>0;i--) { for (j=0;j<i;j++) { if(1==strcmp(phead[j],phead[j+1])) { strcpy(ptmp,phead[j+1]); strcpy(phead[j+1],phead[j]); strcpy(phead[j],ptmp); } } } free(ptmp); } void FindString() { int num=0; char tmp[MAXINPUTSIZE]; while (1) { printf("请输入你要查找的字符串的序号(范围1~%d):",StrNum); //scanf("%d",&num);//使用这个,在不小心输入字母时进入死循环! gets(tmp); num=atoi(tmp); if ((num>0)&&(num<=StrNum)) { printf("查询结果是 %s\n",phead[num-1]); continue; } printf("序号超出范围!\n"); } } void PrintStr() { int i=0; while (i<StrNum) { printf("%s\n",phead[i]); i++; } } void clean() { int i=0; for (;i<StrNum;i++) { free(phead[i]); } free(phead); free(_str); } void main() { Init(); InputString(); CreateDict(); PrintStr(); BubbleSort(); printf("\n"); PrintStr(); //FindString(); clean(); }
相关文章推荐
- 如何动态创建一个数组
- 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- [Unity&数组&List&JSON]创建一个字符串数组string[]类型的list
- 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- 学习小结(动态创建数组,find_first_of())
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- 有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).
- 一个数组中有30个数(随机产生[0,30]),将数组中重复的数字去除,动态创建数组保存剩下的数字
- 用string类型的vector对象创建一个字符指针数组
- 有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).
- 有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).
- 一个数组中有30个数(随机产生[0,30]),将数组中重复的数字去除,动态创建数组保存剩下的数字
- 2有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).
- 有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- 有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组)
- 3.输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 随机生成30个数字(范围0-30)存到一个数组中,将数组中重复的数字去除,动态创建数组保存剩下的数字