/************************************************************************
1、输入一个字符串(字符串个数为N)
2、由已知字符串产生N-1个字符串,产生规则如下:
将第i个字母之前的所有i - 1个字母整体移到末尾
3、加上原来的字符串总共N个,输出这N个字符串中某一个(字符串的大小按字典顺序排列)
例如:“BASD”
---------
|“BASD” |
|“ASDB” | ==》》最小的为“ASDB”
|“SDBA” |
|“DBAS” |
---------
*************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int N;
char *p[100];
void exchange(char *str, int length)
{
char *begin = str;
char *end = str + length - 1;
while(begin <= end)
{
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
}
void NString(char *str, int position)
{
exchange(str, position);
exchange(str + position , N - position);
exchange(str, N);
}
/************************************************************************
InputString函数对输入字符串进行处理,得到N个新的字符串
*************************************************************************/
void InputString(char *InpString)
{
if(NULL == InpString)
{
return;
}
N = strlen(InpString);
for(int i = 0; i < N; i++)
{
p[i] = (char *)malloc((N + 1)* sizeof(char));
if(NULL == p[i])
{
return;
}
strcpy(p[i], InpString);
}
for(int i = 1; i < N; i++)
{
NString(p[i], i);//按照题意得到N个字符串
}
return;
}
void SortString()
{
for(int i = 0; i < N - 1; i++)
{
int k = i;
for(int j = i + 1; j < N; j++)
{
if(strcmp(p[k], p[j]) > 0)
{
k = j;
}
}
if(k != i)
{
char *temp = (char *)malloc(N + 1);
if(NULL == temp)
{
return;
}
strcpy(temp, p[k]);
strcpy(p[k], p[i]);
strcpy(p[i], temp);
free(temp);
}
}
}
/************************************************************************
FindString函数首先对N个字符串按字典顺序排序,
然后按照参数输出第SerialNUmber个字符串到Outpstr中
*************************************************************************/
void FindString(int SerialNumber, char* Outpstr)
{
if(SerialNumber < 1 || SerialNumber > N)
{
return;
}
if(NULL == Outpstr)
{
return;
}
SortString();
strcpy(Outpstr, p[SerialNumber - 1]);
return;
}
/************************************************************************
clear函数对申请的存储字符串序列的空间进行释放
*************************************************************************/
void clear()
{
for(int i = 0; i < N; i++)
{
free(p[i]);
}
}
int main()
{
char str[] = "BASD";
char *out = (char *)malloc(strlen(str) + 1);
InputString(str);
FindString(3, out);
printf("%s", out);
free(out);
clear();
return 0;
}
如何求由已知字符串产生的N个字符串的第M个字符串
最新推荐文章于 2021-11-30 19:32:40 发布