c ++ создает амбиграмму из строки - PullRequest
2 голосов
/ 23 марта 2010

У меня есть задача реализовать «void makeAmbigram (char *)», который будет печатать на экране ambigram латинской строки или возвращать что-то вроде «ambigram not available». Думаю, это просто проверка, содержит ли строка только 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

Ответы [ 3 ]

2 голосов
/ 23 марта 2010

Вам нужно выделить место в ваших массивах или использовать std::vector. Массивы word и reversed являются просто указателями, и пространство не выделяется. Язык 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 имеет несколько обратных итераторов , которые могут быть вам полезны.

0 голосов
/ 29 сентября 2016

Что касается определения амбиграмм, учитывая вики-страницу, которую вы включили в вопрос ... вам нужно проверить, является ли письмо разборчивым, если смотреть вверх ногами, например. U / N, W / M, D / P, Q / B и так далее. Есть конечно более сложные правила, к примеру. 'ui' может напоминать 'm', если смотреть вверх ногами.

Однако, если вам требуется только проверить, содержит ли ваша строка только SNOXZHI, вы можете посмотреть на регулярное выражение (регулярное выражение) для того же самого и сравнить входную строку по символам с вашим регулярным выражением.

0 голосов
/ 23 марта 2010

std::string имеет целое семейство функций-членов в соответствии с find_first_of.Вы можете передать строку, содержащую все буквы, которые требуются вашему тесту ambigram, и они найдут, присутствуют ли какие-либо из этих букв в исходной строке.

Полный список строковых функций доступен здесь .

...