用c++求两个字符串交集
时间: 2024-06-04 21:02:50 浏览: 11
可以使用双重循环遍历两个字符串,将它们的交集存储在一个新的字符串中。具体实现可以参考以下代码:
```cpp
#include <iostream>
#include <string.h>
using namespace std;
void intersection(char str1[], char str2[], char result[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int index = 0;
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
if (str1[i] == str2[j]) {
result[index++] = str1[i];
break;
}
}
}
result[index] = '\0';
}
int main() {
char str1[] = "abcD";
char str2[] = "baccfoweifhauiDdf";
char result[100];
intersection(str1, str2, result);
cout << result << endl;
return 0;
}
```
输出结果为:`acD`
相关问题
使用C++求两个字符串的差集
可以使用 `set` 容器来求两个字符串的差集。具体实现步骤如下:
1. 将第一个字符串中的所有字符插入到一个 `set` 容器中。
2. 遍历第二个字符串,如果当前字符在 `set` 容器中不存在,则将该字符插入到结果字符串中。
以下是 C++ 的实现代码:
```c++
#include <iostream>
#include <string>
#include <set>
using namespace std;
string diff(string s1, string s2) {
set<char> s;
for (char c : s1) {
s.insert(c);
}
string ans;
for (char c : s2) {
if (!s.count(c)) {
ans += c;
}
}
return ans;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
string ans = diff(s1, s2);
cout << ans << endl;
return 0;
}
```
需要注意的是,这里使用了 `set` 容器的 `count` 函数来判断某个字符是否存在于 `set` 中。因为 `set` 中不存在相同的元素,所以如果某个字符存在于 `set` 中,那么它的计数一定是 1,否则就是 0。
用c++求两个字符串的最长公共子序列
好的,这是一道算法问题。可以使用动态规划算法来解决。具体方法是,定义一个二维数组dp,dp[i][j]表示第一个字符串前i个字符和第二个字符串前j个字符的最长公共子序列的长度。然后根据最后一个字符是否相等来更新dp数组,最后返回dp[m][n]即可,其中m和n分别表示两个字符串的长度。需要注意的是,如果两个字符串中有一个为空串,那么最长公共子序列为0。