如何求由已知字符串产生的N个字符串的第M个字符串

来源:互联网 发布:福建茶叶出口数据 编辑:程序博客网 时间:2024/06/18 08:47
/************************************************************************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;}

0 0
原创粉丝点击