2010-03-22 36 views
2

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

我与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

+1

如果这是家庭作业,请标记为这样。此外,“ambigram”的定义将会很有用。 – 2010-03-22 22:23:39

回答

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; 

只要ambigram规则去,你需要与你的老师交谈。另外,如果这是家庭作业,请添加一个标记以指明。

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

0

std::string拥有整个系列的成员函数沿线find_first_of。你可以传入一个包含你的ambigram测试需要的所有字母的字符串,并且他们会发现这些字母是否存在于源字符串中。

字符串函数的完整列表可用here

0

至于ambigrams的定义,考虑到您在问题中包含的wiki页面,您需要检查一个字母是否易读,如果颠倒查看,例如。 u/n,w/m,d/p,q/b等。当然,更复杂的规则很好,例如。如果颠倒观看,'u'可以类似'm'。

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