使用 C++ 检查两个字符串是否是字谜 [英] Check whether two strings are anagrams using C++

查看:11
本文介绍了使用 C++ 检查两个字符串是否是字谜的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想出的下面的程序用于检查两个字符串是否是字谜.它适用于小弦但适用于较大的弦(我试过:听过,入伍)它给了我一个不!"

The program below I came up with for checking whether two strings are anagrams. Its working fine for small string but for larger strings ( i tried : listened , enlisted ) Its giving me a 'no !'

帮助!

#include<iostream.h> 
#include<string.h>
#include<stdio.h>

int main()
{
    char str1[100], str2[100];
    gets(str1);
    gets(str2);
    int i,j;
    int n1=strlen(str1);
    int n2=strlen(str2);
    int c=0;
    if(n1!=n2)
    {
          cout<<"
They are not anagrams ! ";
          return 0;
    }
    else 
    {
         for(i=0;i<n1;i++)
             for(j=0;j<n2;j++)
                 if(str1[i]==str2[j])
                     ++c;
    }
    if(c==n1)
        cout<<"yes ! anagram !! ";
    else 
        cout<<"no ! ";

    system("pause");
    return 0;
}

推荐答案

我很懒,所以我会使用标准库功能对两个字符串进行排序,然后比较它们:

I am lazy, so I would use standard library functionality to sort both strings and then compare them:

#include <string>
#include <algorithm>

bool is_anagram(std::string s1, std::string s2)
{
  std::sort(s1.begin(), s1.end());
  std::sort(s2.begin(), s2.end());
  return s1 == s2;
}

一个小的优化可以是在排序之前检查字符串的大小是否相同.

A small optimization could be to check that the sizes of the strings are the same before sorting.

但如果这个算法被证明是一个瓶颈,我会暂时摆脱我的一些懒惰并将其与一个简单的计数解决方案进行比较:

But if this algorithm proved to be a bottle-neck, I would temporarily shed some of my laziness and compare it against a simple counting solution:

  1. 比较字符串长度
  2. 实例化一个计数映射,std::unordered_map;米
  3. 循环 s1,增加每个 char 的计数.
  4. 循环 s2,递减每个 char 的计数,然后检查计数是否为 0
  1. Compare string lengths
  2. Instantiate a count map, std::unordered_map<char, unsigned int> m
  3. Loop over s1, incrementing the count for each char.
  4. Loop over s2, decrementing the count for each char, then check that the count is 0

这篇关于使用 C++ 检查两个字符串是否是字谜的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆