【发布时间】:2022-01-17 02:22:07
【问题描述】:
如果两个数组有共同的值,我会尝试返回 true,否则返回 False。 问题是在运行此代码时,我发现数组没有像声明的那样。两个数组之一包含两个数组的值
代码如下:
#include<bits/stdc++.h>
using namespace std;
bool commonValues(char arr1[], char arr2[]){
for (int i = 0; i < strlen(arr1); i++){
for(int j = 0; j < strlen(arr2); j++){
if (arr1[i] == arr2[j]){
return true;
}
}
}
return false;
}
int main(){
char arr1[] = {'a', 'b', 'c', 'd', 'z', 'x', 'k', 'l'};
char arr2[] = {'e', 'f', 'g', 'h'};
for (int i = 0; i < strlen(arr2); i++){
}
cout<<commonValues(arr1, arr2)<<endl;
return 0;
}
【问题讨论】:
-
for (int i = 0; i < strlen(arr1); i++){for(int j = 0; j < strlen(arr2); j++){-- 题外话,但这是实现目标的最天真的方式。想象一下,如果字符串有数千个元素——那将是多少次循环迭代?第二个问题是您在每次迭代时都调用strlen。 -
您应该为数组添加空终止符,例如
char arr1[] = {'a', 'b', 'c', 'd', 'z', 'x', 'k', 'l', '\0'};,char arr2[] = {'e', 'f', 'g', 'h', '\0'};. -
strlen仅适用于 NUL 终止的const char*数组。使用std::size。 -
@PaulMcKenzie 我知道这一点。实际上我现在正在学习数据结构和算法课程。我试图编写问题的蛮力解决方案。另外,我不认为 strlen() 每次迭代都会被调用,你知道吗?
-
@MuhammadElmallah --
#include<bits/stdc++.h>-- 去掉这个并使用正确的标题,<iostream>和<cstring>。你还声称你正在上课——没有 C++ 老师或班级应该给你这个标题。如果他们这样做了,那么您就没有正确地学习 C++。您收到的dsize错误可能与使用此标头有关。