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)