2

我有一个任务来实现“void makeAmbigram(char*)”,它将在屏幕上打印拉丁字符串的ambigram或返回类似 'ambigram not possible' 的内容。猜猜这只是检查字符串是否仅包含 SNOXZHI 并向后打印字符串。还是我错了?

在处理 cpp 时,我是一个完全的菜鸟,所以这就是我创建的:

#include <iostream>
using namespace std;

char[]words;
char[]reversed;

char[] ret_str(char* s)
{
    if(*s != '\0')
         ret_str(s+1);

    return s;
}

void makeAmbigram(char* c)
{
 /* finding chars XIHNOZS and printing ambigram */ 
}

int main()
{
   cin>>words;
   reversed = ret_str(words);
   makeAmbigram(reversed);
   return 0;
}

我可以反转字符串,但如何检查我反转的字符串是否只包含需要的字符?我找到了一些功能,但很难甚至不可能为更多的字符实现它:www.java2s.com/Code/C/String/Findcharacterinstringhowtousestrchr.htm

4

3 回答 3

2

您需要在数组中分配空间或使用std::vector. 数组wordreversed只是指针,没有分配空间。C++ 语言不支持动态数组;但是,STL 提供了std::vector根据需要动态分配空间的功能。

改变:

char[]words;
char[]reversed;

至:

#define MAX_LETTERS 64
char words[MAX_LETTERS + 1]; // + 1 for terminating nul character ('\0')
char reversed[MAX_LETTERS + 1];

或者:

#include <string>
std::string words;
std::string reversed;

或者:

#include <vector>
std::vector<char> words;
std::vector<char> reversed;

就二元图规则而言,您需要与您的导师交谈。此外,如果这是家庭作业,请添加一个标签来表示。

提示:std::string数据类型有一些可能对你有用的反向迭代器。

于 2010-03-22T22:33:32.347 回答
0

std::string具有整个系列的成员函数,类似于find_first_of. 您可以传入一个字符串,其中包含您的 ambigram 测试所需的所有字母,他们会发现源字符串中是否存在这些字母。

此处提供了字符串函数的完整列表。

于 2010-03-23T13:09:54.090 回答
0

至于 ambigrams 的定义,鉴于您在问题中包含的 wiki 页面......您需要检查一个字母如果倒置查看是否清晰,例如。u/n、w/m、d/p、q/b 等。当然还有更复杂的规则很好,例如。如果倒置查看,“ui”可能类似于“m”。

但是,如果您只需要检查您的字符串是否仅包含 SNOXZHI,您可以查看相同的正则表达式 (regex),并将输入字符串逐个字符与您的正则表达式进行比较。

于 2016-09-29T04:03:07.917 回答