2

「void makeAmbigram(char*)」を実装するタスクがあります。これは、ラテン文字列の画面アンビグラムに出力するか、「アンビグラムは不可能」のようなものを返します。文字列に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ます。アンビグラム テストに必要なすべての文字を含む文字列を渡すと、それらの文字のいずれかがソース文字列に存在するかどうかが検出されます。

文字列関数の完全なリストは、こちらから入手できます。

于 2010-03-23T13:09:54.090 に答える