首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >此代码不适用于{"parses“、"parsecs"}

此代码不适用于{"parses“、"parsecs"}
EN

Stack Overflow用户
提问于 2019-12-23 13:55:26
回答 1查看 48关注 0票数 0
代码语言:javascript
运行
复制
#include<iostream>
#include<vector>
#include<string>

using namespace std;
bool letterCheck(vector<string> arr)
{
    int b=0;
    int l1=arr[0].length();
    int l2=arr[1].length();
    for(int i=0;i<l1;i++)
    {
        for(int j=0;j<l2;j++)
        {
            if(tolower(arr[1][i])==tolower(arr[0][j]))
            b++;
        }
    }
    if(b<arr[1].length())
        return false;
    else return true;
}


int main()
{
    vector <string> v={"parses", "parsecs"};
    cout<<letterCheck(v);
    return 0;
}

是一个接受两个字符串的数组并检查第二个字符串中的字母是否存在于第一个字符串中的程序。

示例:letterCheck(“恍惚”,“蜜”)➞true

letterCheck(“密友”,“窗帘”)➞真

letterCheck(“分析”,"parsecs")➞false

这个程序工作在上面,给出{"parses","parsecs"}的pairs.It返回真,但是它应该返回false。能告诉我,代码中的问题是什么,我能做什么来消除这个问题???

EN

回答 1

Stack Overflow用户

发布于 2019-12-23 14:29:39

当前的问题是,您试图计数匹配字符,以查看第二个字符串中的所有字符是否在第一个字符串中都匹配。但是,由于第一个字符串中有重复字符,计算就出错了:两个’s’的存在使b比您希望的要大。一旦找到一个字符以避免出现问题,您就可以跳出循环。

顺便说一句,将未检查的char传递给tolower()可以得到未定义的行为:在大多数平台上,char都是签名的,但是在tolower()上有一个先决条件,要求参数为nin-负数或EOF

而且,b < arr[1].length()的结果是一个bool (尽管它需要倒排):不需要编写一个花哨的条件来将它转换为布尔值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59456549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档