5kyu—Play with two Strings

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
void handover (char ch, char *str)
{
 for(size_t i = 0; i < strlen(str); i++)
 {
if( ch == toupper(str[i]) )
{
  if( isupper(str[i]) )
    str[i]+=32;
  else
    str[i]-=32;
}
 }
}
char *work_on_strings(const char *a, const char *b) {

size_t lena = strlen(a), lenb = strlen(b), i;
 char *stra = (char*)malloc(lena * sizeof(char) +1);
char *strb = (char*)malloc(lenb * sizeof(char) +1);
char *strc = (char*)malloc( (lena + lenb) * sizeof(char) +2);

 strncpy( stra, a, lena+1 ); strncpy( strb, b, lenb+1 );

 int character[26] = {0};
for( i = 0; i < lena; i++ )
 {
character[ toupper(stra[i]) - 'A' ] ++;
}

 for( i = 0; i < 26; i++ )
 {
if( character[i] % 2 == 1 )
      handover( i + 65, strb );
  }
memset( character, 0 , sizeof(int) * 26 );

 for( i = 0; i < lenb; i++ )
{
character[ toupper(strb[i]) - 'A' ] ++;
  }

for( i = 0; i < 26; i++ )
 {
if( character[i] % 2 == 1 )
      handover( i + 65, stra );
  }

  strncpy( strc, stra ,lena+1);
strncat( strc, strb ,lenb+1);

free(stra); free(strb);

return strc;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值