jiankeabcd 2016-05-31 02:37 采纳率: 73.9%
浏览 1283
已采纳

一个c语言雏形 写2个交换函数

题目太长了不说了 (只需要修改reverse函数和swap函数)
如下 一个是reverse 一个是swap
reverse要求把in[sp]一直到in[ep-1]的排列顺序调转
swap要求把in[0]到in[sp-1]为止的整体排列与in[sp]到in[ep-1]为止的整体排列换位

我自己写的输出结果不对

要求结果
<例1>
输入
3
001
12345
0000

输出
3
18
1

<例2>
输入
2
012
1234

输出
6
12

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef int item;
typedef struct node *link;

#define MAX_LEN 100
#define MAX_RESULTS 1000

struct node
{
    char *p;
    link next;
};
link NEW(char *inp,link next)
{
    link x=malloc(sizeof(*x));
    x->p=inp;
    x->next=next;
    return x;
}

void reverse(int sp,int ep,char*in)
{
    int i;
    char temp;
    for(i=0;i<ep-sp+1;i++){
        temp=in[sp+i];
        in[sp+i]=in[ep-(i+1)];
        in[ep-(i+1)]=temp;
    }
    //reverse in[sp]...in[ep-1]
}

void swap(int sp,int ep,char *in)
{
    int i,j,k;
    char temp[101];
    char box1[101];
    char box2[101];
    for(i=0;i<sp;i++){
        temp[i]=in[i];
    }
    for(j=0;j<ep-sp+1;j++){
        box1[j]=in[sp+j];
    }
    for(k=0;k<sp;k++){
        box2[k]=temp[k];
    }
    in=strcat(box1,box2);
    //swap in[0]~in[sp-1] by in[sp]~in[ep-1]
}

int chk_isnew(char *in,link *p_head)
{
    link t=*p_head;
    while(t!=NULL)
    {
        if(strcmp(t->p,in)==0) return 0;
        else t=t->next;
        //implement
        //return 0 if t->p is equal to in
        //next node otherwise
    }
    char *store=(char *)malloc(sizeof(char)*MAX_LEN);
    memcpy(store,in,sizeof(char)*MAX_LEN);
    *p_head=NEW(store,*p_head);
    return(1);
}

int main(void)
{
    link head;
    int num,cnt,i;
    scanf("%d",&num);

    int *result=(int *)malloc(sizeof(int)*MAX_RESULTS);
    char *dish;
    char *tmp_dish;
    for(cnt=0; cnt<num; cnt++)
    {
        result[cnt]=0;
        head=NULL;
        dish=(char *)malloc(sizeof(char)*MAX_LEN);
        memset(dish,0x00,sizeof(char)*MAX_LEN);
        tmp_dish=(char *)malloc(sizeof(char)*MAX_LEN);
        scanf("%s",dish);
        memcpy(tmp_dish,dish,sizeof(char)*MAX_LEN);
        int len=strlen(dish);
        for(i=1; i<len; i++)
        {
            int rev,swp;
            for(rev=0; rev<4; rev++)
            {
                switch(rev)
                {
                case 0:
                    break;
                case 1:
                    reverse(0,i,tmp_dish);
                    break;
                case 2:
                    reverse(i,len,tmp_dish);
                    break;
                case 3:
                    reverse(0,i,tmp_dish);
                    reverse(i,len,tmp_dish);
                    break;
                }
                for(swp=0; swp<2; swp++)
                {
                    switch(swp)
                    {
                    case 0:
                        break;
                    case 1:
                        swap(i,len,tmp_dish);
                        break;
                    }
                    if(chk_isnew(tmp_dish,&head)) result[cnt]++;
                }
                memcpy(tmp_dish,dish,sizeof(char)*MAX_LEN);
            }
        }
        link t=head;
        while(t->next!=NULL)
        {
            t=t->next;
        }
        link r;
        t=head;
        while(t->next!=NULL)
        {
            r=t;
            t=t->next;
            free(r->p);
            free(r);
        }
        free(dish);
        free(tmp_dish);
    }
    for(cnt=0; cnt<num; cnt++)
    {
        printf("%d\n",result[cnt]);
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • Mr.Stone^_^ 2016-05-31 06:03
    关注

    void reverse(int sp,int ep,char*in)
    {
    int i;
    char temp;
    for(i=sp;i<ep;i++){
    temp=in[i];
    in[i]=in[--ep];
    in[ep]=temp;
    }
    }
    void swap(int sp,int ep,char *in)
    {
    int i,j;
    char temp;
    for(i=0;i<sp;i++)
    {
    temp=in[i];
    in[i]=in[i+sp];
    in[i+sp]=temp;
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)