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

下面是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");

    }
}

猜你喜欢

转载自blog.csdn.net/qq_41926099/article/details/131310277
今日推荐