C++实现strpbrk()函数

C++实现strpbrk()函数

strpbrk()是C++ STL中的字符串函数,它接受两个字符串,查找字符串1中字符串2中任何字符的第一个出现位置。如果有字符匹配,该函数返回指向字符串1中与字符串2匹配的字符的指针,否则返回NULL。

语法:

char* strpbrk(const char *str1, const char *str2)

示例:

// C++代码使用strpbrk()函数
#include <cstring>
#include <iostream>
using namespace std;
  
int main()
{
    char str1[] = "GeeksforGeeks";
    char str2[] = "strpbrk";
  
    char* pos;
  
    pos = strpbrk(str1, str2);
  
    if (pos != NULL) {
        cout << "字符串1中第一个匹配的字符为 "
             << *pos << " 位于 " << pos - str1 + 1;
    }
  
    else {
        cout << "未找到字符" << endl;
    }
  
    return 0;
}  

输出

字符串1中第一个匹配的字符为 k 位于 4

在C++中实现strpbrk()函数的程序

  • 给定两个字符数组“str1”和“str2”。
  • 使用嵌套的for循环,比较str1和str2。
  • 如果str2中的任何字符存在于str1中,则将str1的第i个索引存储在变量pos中并退出循环。
  • 如果pos等于-1,表示在两个字符串中没有字符已匹配,则打印未找到字符。
  • 否则打印该字符及其在str1中的位置。

示例:

// C++代码实现Implement strpbrk()函数
#include <iostream>
using namespace std;
  
int main()
{
    char str1[20] = "GeeksforGeeks";
    char str2[20] = "strpbrk";
    int pos = -1;
    bool found = 0;
  
    for (int i = 0; str1[i] != '\0'; i++) {
        for (int j = 0; str2[j] != '\0'; j++) {
            if (str1[i] == str2[j]) {
                pos = i;
                found = 1;
                break;
            }
        }
  
        if (found) {
            break;
        }
    }
  
    if (pos != -1) {
        cout << "字符串1中第一个匹配的字符为 "
             << str1[pos] << " 位于 " << pos + 1
             << endl;
    }
    else {
        cout << "未找到字符" << endl;
    }
  
    return 0;
}  

输出

字符串1中第一个匹配的字符为 k 位于 4

时间复杂度 : O(N 2 )

辅助空间复杂度 : O(1)

高效方法 : 可以通过在C++中使用set来优化给定问题。按照以下步骤解决此问题:

  • 给定两个字符数组“str1”和“str2”。
  • 将str2的所有字符插入集合中。
  • 遍历str1并检查。
  • 如果str2中的任何字符存在于str1中,则将str1的第i个索引存储在变量pos中并退出循环。
  • 如果pos等于-1,表示在两个字符串中没有字符已匹配,则打印未找到字符。
  • 否则打印该字符及其在str1中的位置。

示例:

// C++程序,使用set实现给定问题
#include <iostream>
#include <set>
using namespace std;
  
int main()
{
    char str1[20] = "GeeksforGeeks";
    char str2[20] = "strpbrk";
    int m = sizeof(str2) / sizeof(str2[0]);
    int pos = -1;
  
    set<char> s(str2, str2 + m);
  
    for (int i = 0; str1[i] != '\0'; i++) {
        if (s.find(str1[i]) != s.end()) {
            pos = i;
            break;
        }
    }
  
    if (pos != -1) {
        cout << "str1中第一个匹配字符是"
             << str1[pos] << " 在第" << pos + 1
             << " 位置" << endl;
    }
    else {
        cout << "未找到字符" << endl;
    }
  
    return 0;
}  

输出

str1中第一个匹配字符是k 在第4位置

时间复杂度:O(max(n, m)*log(m))

辅助空间:O(m)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例