1

基本上我有2个子问题的问题。第一个问题是:给定 2 个字符串,确定它们是否是字谜。二是有点难。您有 N 个字符串,并且必须确定它们是否是彼此的字谜。

我已经解决了第一个问题,我将在下面编写代码,但是对于第二个我不知道。我在想有可能通过从字符串数组中读取 N 个字符串来以某种方式做到这一点,然后使用 for 序列读取每个字符串并进行比较,但我不知道如何准确。

#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string word1; string word2;

    getline(cin,word1);
    getline(cin,word2);

    if(word1.length()==word2.length()){
        sort(word1.begin(), word1.end());
        sort(word2.begin(), word2.end());
    if(word1==word2) cout<<"The words are anagrams of each other"<<endl;
    else cout<<"The words are not anagrams of each other"<<endl;
    }
    else cout<<"The words are not the same length"<<endl;
return 0;
}
4

2 回答 2

0

如果 X 是 Y 和 Z 的字谜,那么 Y 和 Z 也是字谜

因此,只需重复您的逻辑,最简单的方法:-

std::vector<std::string> words; //Use a vector
size_t i;
std::string word1,word2;
//Get words from standard input
std::copy(std::istream_iterator<std::string> (std::cin),
          std::istream_iterator<std::string>(),
          std::back_inserter(words));

word1=words[0]; //Check anagram with first word
sort(word1.begin(), word1.end());
for(i=1; i<words.size();i++)
{
    word2=words[i];
    sort(word2.begin(), word2.end());
    if(word2!=word1)
       break;
}

if(i==words.size())
    std::cout<<"All Anagrams !";
于 2013-10-17T17:43:31.990 回答
0

查找两个字符串是否是字谜非常简单,尤其是对于 ASCII 字符集。最好的方法是创建一个大小为 256 的 int 数组。遍历第一个字符串并为每个 char ++ 找到该 int。对第二个字符串做同样的事情,并检查数组的结果是否相同。

将其扩展到多个字符串很容易,因为如果

a是b的字谜,b是c的字谜,那么a是c的字谜

如果您使用较大的非 ASCII 字符集执行此操作,则使用哈希图而不是位集可能是个好主意。

于 2013-10-17T17:40:27.090 回答