1140:验证子串

【题目描述】

输入两个字符串,验证其中一个串是否为另一个串的子串。

【输入】

输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。

【输出】

若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2)

否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1)

否则,输出 No substring。

【输入样例】

abc
dddncabca

【输出样例】

abc is substring of dddncabca

这题是字符串的字串问题strstr()注意是在string.h中

其实要知道字符串位移包含的问题

#include<iostream>
#include<string>
#include<iostream>
#include<string>
//#include<bits/stdc++.h>
#include<cctype>
#include<algorithm>
#include<cstring>

using namespace std;
int main()
{

    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    string t;
    if(s1.size()<s2.size())
    {
        t=s1;
        s1=s2;
        s2=t;
    }
    //cout<<strstr(s1.c_str(),s2.c_str())<<endl;
    if(strstr(s1.c_str(),s2.c_str()))
    {
        cout<<s2<<" is substring of "<<s1<<endl;
    }
    else
        cout<<"No substring"<<endl;

	return 0;
}

在计算机科学中,**子串(substring)** 是指从一个字符串中连续取出若干字符所组成的新字符串。子串与子序列(subsequence)不同,子序列不要求字符连续,而子串则必须是连续的字符序列。 例如,字符串 `"abcde"` 的一些子串包括 `"abc"`、`"bcd"`、`"de"`,而 `"ace"` 则不是它的子串,因为字符不连续。 --- ### 如何判断一个字符串是否为另一个字符串的子串? 判断一个字符串是否为另一个字符串的子串,可以通过多种方法实现,具体取决于使用的编程语言。以下是几种常见语言的实现方式: #### C++ 实现(不使用系统函数) 以下代码展示了如何在 C++ 中手动实现子串查找,不使用 `strstr()` 或 `find()` 等系统函数: ```cpp #include <iostream> using namespace std; int match(char s[], char p[]) { int i, j, k; for (i = 0; s[i] != '\0'; i++) { for (j = i, k = 0; s[j] != '\0' && p[k] == s[j]; j++, k++); if (p[k] == '\0') return i; } return -1; } int main() { char s1[100], s2[100]; cout << "请输入字符串A: " << endl; cin.getline(s1, 100); cout << "请输入子字符串B: " << endl; cin.getline(s2, 100); int k = match(s1, s2); if (k != -1) cout << s2 << "是" << s1 << "的子字符串,位置在" << k + 1 << endl; else cout << s2 << "不是" << s1 << "的子字符串"; return 0; } ``` 此程序通过双重循环逐个字符比对主串和子串,若匹配成功则返回子串在主串中的起始位置(从 1 开始计数),否则返回 -1[^1]。 #### Java 实现 Java 中可以使用 `indexOf()` 方法来判断一个字符串是否为另一个字符串的子串。若包含子串,则返回子串首次出现的索引位置;否则返回 -1: ```java public class SubstringCheck { public static void main(String[] args) { String mainStr = "Hello, world!"; String subStr = "world"; int index = mainStr.indexOf(subStr); if (index != -1) { System.out.println(subStr + " 是 " + mainStr + " 的子串,起始位置为 " + (index + 1)); } else { System.out.println(subStr + " 不是 " + mainStr + " 的子串"); } } } ``` #### Python 实现 Python 中可以使用 `in` 操作符或 `find()` 方法来判断子串是否存在: ```python main_str = "I Love Crystal!And I Hate Tom!" sub_str = "Crystal" if sub_str in main_str: print(f"{sub_str} 是 {main_str} 的子串") else: print(f"{sub_str} 不是 {main_str} 的子串") ``` 也可以使用 `str.find()` 方法,其返回值为子串首次出现的索引位置,若不存在则返回 -1: ```python index = main_str.find(sub_str) if index != -1: print(f"{sub_str} 是 {main_str} 的子串,起始位置为 {index + 1}") ``` #### 使用标准库函数(C语言) 在 C 标准库中,可以使用 `strstr()` 函数来查找子串: ```c #include <stdio.h> #include <string.h> int main() { char mainStr[] = "Hello, world!"; char subStr[] = "world"; char *result = strstr(mainStr, subStr); if (result != NULL) { printf("%s 是 %s 的子串,位置在 %ld\n", subStr, mainStr, result - mainStr + 1); } else { printf("%s 不是 %s 的子串\n", subStr, mainStr); } return 0; } ``` --- ### 总结 - 子串是连续字符组成的字符串。 - 判断子串的方法包括手动实现双指针匹配,或使用语言内置函数如 `indexOf()`、`find()`、`strstr()` 等。 - 手动实现时需注意边界条件和效率问题,尤其在处理大字符串时应考虑优化算法(如 KMP 算法)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值