字符串截取函数substr的用法

时间:2025-03-03 14:20:24
#include<map> #include<set> #include<stack> #include<queue> #include<cmath> #include<bitset> #include<cstdio> #include<string> #include<vector> #include<sstream> #include<cstring> #include<> #include<iostream> #include<algorithm> using namespace std; #define eps 1e-8 #define endl '\n' #define inf 0x3f3f3f3f #define MAX 1048576 #define mod 1000000007 #define lowbit(x) (x & (-x)) #define sd(n) scanf("%d",&n) #define sdd(n,m) scanf("%d %d",&n,&m) #define pd(n) printf("%d\n", (n)) #define pdd(n,m) printf("%d %d\n",n, m) #define sddd(n,m,z) scanf("%d %d %d",&n,&m,&z) #define io ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define mem(a,b) memset((a),(b),sizeof(a)) //#define max(a,b) (((a)>(b)) ? (a):(b)) //#define min(a,b) (((a)>(b)) ? (b):(a)) typedef long long ll ; typedef unsigned long long ull; //不开longlong见祖宗!不看范围见祖宗! inline int IntRead(){char ch = getchar();int s = 0, w = 1;while(ch < '0' || ch > '9'){if(ch == '-') w = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){s = s * 10 + ch - '0';ch = getchar();}return s * w;} int n; string str[30]; char x; int ans; int tr[30]; void dfs(string s, int num){ ans = max(ans, num);//更新答案 for(int i = 1; i <= n; ++i){ if(tr[i] == 2)continue; int len1 = (int)s.size(); int len2 = (int)str[i].size(); for(int j = min(len1, len2) - 1; j >= 1; --j){ if(s.substr(len1 - j, j) == str[i].substr(0, j)){//用上一个连接成功的字符串的后缀去匹配别的字符串的前缀 ++tr[i];//记录次数用 dfs(str[i], num + len2 - j); --tr[i]; } } } } int main(){ cin>>n; for(int i = 1; i <= n; ++i)cin>>str[i]; cin>>x; for(int i = 1; i <= n; ++i){ if(str[i][0] == x){ mem(tr, 0); ++tr[i]; dfs(str[i], (int)str[i].size()); } } cout<<ans<<endl; return 0; } /* 5 at touch cheat choose tact a */