【C++_OJ_指针】三串合一(指针与字符数组)

该代码片段展示了如何使用C++通过指针操作合并三个字符串的指定子串。程序首先读取三个字符串和它们的子串起始与结束位置,然后利用`strncpy`函数复制子串到临时数组。接着,使用指针遍历这些子串并将字符添加到新字符串中。最后,输出合并后的新字符串并释放内存。

题目

输入三个字符串,通过指针读取各个字符串的子串(子串是指字符串中连续的一小部分),把它们合并成一个新字符串

要求:

  1. 三个字符串的创建和输入可以使用数组,也可以不用

  2. 输入后,根据三个字符串的子串的长度,计算出新字符串的长度

  3. 使用动态数组的方法创建新的字符串,并且使用指针读取三个字符串的不同部分,并且复制到新字符串中,要求整个过程都不能使用数组下标

  4. 使用指针输出新的字符串

输入

第一行输入t表示有t个测试实例

连续三行输入三个字符串,每个字符串都包含10个字符

连续三行,每行输入数字a和b,表示每个子串的开始和结束位置。注意字符串的位置是按照一般意义从1开始计算,和编程中的数组位置不同。例如字符串abcdefg,开始位置是3,结束位置是5,那么子串就是cde

依次输入t个实例

输出

每行输出合并后的新字符串

输入样例1

2
abcdefghij
ABCDEFGHIJ
aabbccddee
3 5
2 6
8 10
AABBCCDDEE
ffgghhiijj
FFGGHHIIJJ
1 4
5 8
2 7

输出样例1

cdeBCDEFdee
AABBhhiiFGGHHI

代码

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;

int main()
{
 
    int t;
    char *a,*b,*c;      //字符串指针
    a = new char[11];   //三个字符串,每个字符串都包含10个字符
    b = new char[11];
    c = new char[11]; 

    cin>>t;
    while(t--)
    {
        int i=0;                 //用来控制字符长度所在的位置
        int a1,a2,b1,b2,c1,c2;   //每个字符串的开始和结束位置
        char aTemp[11]={0};       //用来暂时存放每个字符串的子串
        char bTemp[11]={0};
        char cTemp[11]={0};

        char newTemp[100] ={0}; //用来存储合并后的字符串
        char *newStr = newTemp;

        cin>>a>>b>>c;
        cin>>a1>>a2>>b1>>b2>>c1>>c2;

        //使用strncpy将子串复制到暂时存放的数组
        strncpy(aTemp,a+a1-1,a2-a1+1); 
        strncpy(bTemp,b+b1-1,b2-b1+1);
        strncpy(cTemp,c+c1-1,c2-c1+1);

        //使用指针指向字符串的首地址,进行访问
        char *pa = aTemp;
        char *pb = bTemp;
        char *pc = cTemp;

        while(*pa != '\0')      //如果子串还没扫描完
            *newStr++ = *pa++;  //加到newStr后面
        while(*pb != '\0')
            *newStr++ = *pb++;
        while(*pc != '\0')
            *newStr++ = *pc++;
        
        cout << newTemp <<endl;

        delete []a;  //释放内存
        delete []b;
        delete []c;
        
    }   
    
    return 0;

}
         
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ferry_xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值