gpt4 book ai didi

c++ - 如何根据一个特定字母的出现来判断两个字符串是否相等?

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:41 31 4
gpt4 key购买 nike

对于这个项目,如果两个字符串都具有相同的字符“X”出现次数并且字符“X”在每个字符串中的位置相同,则这两个字符串相等。请注意,这允许不同长度的字符串,只要较长的字符串末尾的额外字符中没有任何“X”即可。我需要用函数原型(prototype)来实现这个 equals 函数bool equalsChar(const string& strA, const string& strB, char ch).

示例

  • equalsChar( "X", "X", 'X' ) 为真
  • equalsChar( "aaaXaaaX", "abcXcbaX", 'X') 为真
  • equalsChar( "XaXbXcX", "XtXoXpXdef", 'X') 为真
  • equalsChar( "XaXbXcX", "XtXoXpXdXf", 'X') 为假
  • equalsChar( "XXXX", "XX", 'X') 为假
  • equalsChar( "aXaXbXcX", "XtXoXpX", 'X') 为假

我们可以使用辅助函数,但不允许分配任何额外的内存(例如,不要使用子字符串)。我们在处理字符串时需要使用索引。

我已经尝试了迄今为止所掌握的知识,并在不同的网站上寻找类似的问题,但这似乎是一个独特的问题。

代码如下:

bool equalsChar(const string& strA, const string& strB, char ch){
int low1=0;
int low2=0;
int high1=strA.length()-1;
int high2=strB.length()-1;
return equalsChar(strA, low1, high1, strB, low2, high2, ch);
}

我正在使用重载函数:

bool equalsChar(const string& strA, int low1, int high1, const string& strB, int low2, int high2, char ch){
int count1=0;
int count2=0;
for(int i=low1; i<=high1; i++){
if(strA[i]==ch)
count1++;
}
for(int j=low2; j<=high2; j++){
if(strB[j]==ch)
count2++;
}
if(count1==0 && count2==0)
return false;
else if(count1!=count2)
return false;
else{
for(int i=low1; i<=high1; i++){
if(strA[i]==ch){
for(int j=low2; j<=high2; j++){
if(strB[j]==ch){
if(i==j)
return true;
}
}
}
}
}
return false;
}

有两个问题:
1. 我需要递归地编写这段代码。
2. 我只检查 strAstrB 中等于 ch 的第一个字符,然后比较它们的索引,而我需要做的就是比较两个字符串中的所有 X。

它为 equalsChar( "aaaXaaXa", "abcXcbaX", 'X') 返回 true,但它应该返回 false。

最佳答案

首先确保较长的字符串是strB。如果需要,我们使用递归来交换参数。

然后测试公共(public)长度。我们用 == ch 将每个字母投影到 bool,并比较那些 bool

最后我们测试ch是否出现在strA.size()之后。

bool equalsChar(const string& strA, const string& strB, char ch) {
if (strA.size() > strB.size()) { return equalsChar(strB, strA, ch); }

auto common = [ch](char a, char b) { return (a == ch) == (b == ch); };
return std::equal(strA.begin(), strA.end(), strB.begin(), common)
&& (std::find(strB.begin() + strA.size(), strB.end(), ch) == strB.end());
}

或者使用 C++17 的 string_view 和范围库来整理。

bool equalsChar(string_view strA, string_view strB, char ch) {
if (strA.size() > strB.size()) { return equalsChar(strB, strA, ch); }

auto common = [ch](char a, char b) { return (a == ch) == (b == ch); };
string_view prefix = strB.substr(0, strA.size());
string_view suffix = strB.substr(strA.size());

return ranges::equal(strA, prefix, common)
&& !ranges::contains(suffix, ch);
}

关于c++ - 如何根据一个特定字母的出现来判断两个字符串是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57879398/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com