c语言字符串提取与合成问题?

用户输入字符串abcdefg,将下标为偶数的字符串提出来合并成一个新的字符串aceg,再将下标为奇数的字符串提出来合并成一个新的字符串bdf,再将两个新的字符串连接起来输出acegbdf。

按要求,将原字符串拆分成两个字符串分别单独保存。

思路:

一、两个指针分别指向数组第一项和第二项,对应偶数项和奇数项,之后指针同时循环+2取值保存在对应数组。

二、拼接字符串直接使用字符串函数strcat。(不想使用库函数,也可循环赋值)。

#include <stdio.h>

#include <string.h>

#define M 20 //数组最大长度

int splitStr(char str[],char oStr[],char eStr[]);//拆分str到oStr和eStr

int main()

{

    char str[M+1],oStr[M+1],eStr[M+1];//str为原字符串,oStr为奇数字符串,eStr为偶数字符串

    printf("请输入一个字符串(最大%d个字符):",M);

    scanf("%s",str);

    splitStr(str,oStr,eStr);

    printf("其中奇数项组成的字符串为:%s\n",oStr);

    printf("其中偶数项组成的字符串为:%s\n",eStr);

    strcat(eStr,oStr);//将偶数组和奇数组组合后放在偶数组中

    printf("将偶数组和奇数组组合后新数组为%s\n",eStr);

    return 0;

}

int splitStr(char str[],char oStr[],char eStr[])

{

    int i=0,j=0;

    char *op=str+1,*ep=str;//op指向奇数项,ep指向偶数项,循环+2取值

    while(1)

    {

        if(*ep==0) break;

        if(*ep) eStr[i++]=*ep;

        if(*ep && *op) oStr[j++]=*op;

        if(*op==0) break;

        ep+=2,op+=2;

    }

    eStr[i]=0,oStr[j]=0;

    return 1;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-21

#include <stdio.h>

void func(char *s)

{

    int i;

    for(i=0;s[i];i++)

        if(i%2==0)

            putchar(s[i]);

    for(i=0;s[i];i++)

        if(i%2)

            putchar(s[i]);

}

int main()

{

    char s[100];

    gets(s);

    func(s);

    return 0;

}

追问

大佬 可以用数组的方式实现吗?还有提取出来的两个字符串要先分别输出哦

第2个回答  2021-11-21

#include <stdio.h>

int main()

{ char s[100],s1[100]={0},s2[50]={0};

  int i,j,k;

  gets(s);

  for(i=j=0;s[i];i++)

    if(i%2==0)s1[j++]=s[i];

  puts(s1);

  for(i=k=0;s[i];i++)

    if(i%2)s2[k++]=s[i];

  puts(s2);

  for(i=0;s2[i];i++)

    s1[j++]=s2[i];  

  puts(s1);

  return 0;

}