ZigZag Conversion

本文深入探讨了字符字符串转换算法及内存管理技巧,包括如何高效地将字符字符串转换为特定格式,并优化内存使用效率。
#include <stdlib.h>
#include <stdio.h> 
char* convert(char* s, int numRows) {
    int count=0;
    int i;
    int j;
    char*Temp=s;
    while(*s){
        s++;
        count++;
    }
    s=Temp;
    char**res=(char**)malloc(sizeof(char*)*numRows);
    for(i=0;i<numRows;i++){
        res[i]=(char*)malloc(sizeof(char)*count);
    }
    char**Tmp=(char**)malloc(sizeof(char*)*numRows);
    for(i=0;i<numRows;i++){
        Tmp[i]=res[i];
    }
    while(*s){
        for(i=0;i<numRows&&*s!=0;i++){
            *res[i]=*s;
            s++;
            res[i]++;
        }
        for(j=numRows-2;j>=1&&*s!=0;j--){
            *res[j]=*s;
            s++;
            res[j]++;
        }
    }
    for(i=0;i<numRows;i++){
        *res[i]=0;
    }
    for(i=0;i<numRows;i++){
        res[i]=Tmp[i];
    }

//  for(i=0;i<numRows;i++){
//      printf("%s\n",res[i]);
//  }
    char*result=(char*)malloc(sizeof(char)*(count+1));
    char*resultTmp=result;
    for(i=0;i<numRows;i++){
        while(*res[i]){
            *result=*res[i];
            result++;
            res[i]++;
        }
    }
    *result='\0';
    return resultTmp;
}
int main(){
    char*s=(char*)malloc(sizeof(char)*15);
    s=convert("hello", 2);
    printf("%s",s);
    return 0;
}

这边有一点要注意

while(*s){
        for(i=0;i<numRows&&*s!=0;i++){
            *res[i]=*s;
            s++;
            res[i]++;
        }
        for(j=numRows-2;j>=1&&*s!=0;j--){
            *res[j]=*s;
            s++;
            res[j]++;
        }
    }

这段中要注意for循环中还要有*s!=0
否则会越界 因为一个循环做完 采取判断while 中的条件的
这个写的 内存用了过多了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值