您的位置:首页 > 其它

【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,属于玩具程序。留待以后修改。

#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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐