c++ 读取字符串 格式化输出

文章讲述了如何使用C++解决ACwing4385题目的方法,该题目要求判断字符串a是否为字符串b的子串。通常这类问题可以通过双指针技巧解决,但文章作者在处理字符串数据时遇到困难,考虑使用map统计字符,最终采用cstring库操作字符数组。代码示例中,通过scanf读取字符串,然后用while循环和指针移动检查子串存在性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是acwing 4385的题解,简单来说就是判断字符串a是不是字符串b的子串

如果这一题是直接说判断b是不是a的子串,那就是leetcodeE392,是一道使用双指针的简单题,但是在这里我没太整明白,甚至想用map去一个个统计,这种竞赛类题目和力扣那种直来直往的题目还是有点差别的。

整体的做法并不难,对我而言难在字符串数据的读取,整了半天string最后发现似乎大家都不太使用string库,而是使用cstring来对字符串进行一系列操作。字符串的

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

// 因为初始化一个数组不能使用int型的变量,必须要const
const int N=100010;
int n,m;
// 定义两个char数组用来存字符串
// 注意,这里一般不使用string来实现字符串的记录,而是使用一个大小一定大于(不能等于,因为要留出来最后一个空位放\0)
// 这个字符串的char数组来保存,当a和bchar数组填入字符串之后,他们的大小就会变得
// 和这个字符串一样大,可以通过strlen来查询这个字符串的长度,具体的关于char[]型
// 字符串的相关操作之后再慢慢学
char a[N],b[N];

int main()
{
    int T;
    scanf("%d",&T);
    for (int cases=1;cases<=T;cases++){
        // 可以一下读取两个字符串,这个和写成两行的效果是一样的
        scanf("%s%s",a,b);
        n=strlen(a);
        m=strlen(b);
        // 可以同时初始化两个int,这写都是非常基本的c++操作,但是我竟然不会!!
        int i=0,j=0;
        while(i<n && j<m){
            if(a[i]==b[j]){i++;j++;}
            else j++;
        }
        printf("Case #%d: ",cases);
        if(i==n){
            printf("%d\n",m-n);
            }
        else puts("IMPOSSIBLE");

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值