C++ 如何使用关键字打印字母表的二维数组?

C++ 如何使用关键字打印字母表的二维数组?,c++,C++,所以我的任务是打印出一个2-D数组,它是5x5,在数组的每个位置都有字母表中的每个字母。我应该使用一个关键字并在二维数组的行中打印它,然后打印出字母表的其余字母。字母在整个数组中只能打印一次,不包括“Z” 不太好,但这就是我目前的情况: #include <string> #include <iomanip> #include <fstream> using namespace std; bool correct_keyword(char); int ma

所以我的任务是打印出一个2-D数组,它是5x5,在数组的每个位置都有字母表中的每个字母。我应该使用一个关键字并在二维数组的行中打印它,然后打印出字母表的其余字母。字母在整个数组中只能打印一次,不包括“Z”

不太好,但这就是我目前的情况:

#include <string>
#include <iomanip>
#include <fstream>
using namespace std;

bool correct_keyword(char);

int main()
{
    ifstream fin ("infile.txt");
    char array[5][5];
    char i, keyword;
    bool correct;

    cout << "Type in the key word: " << endl;
    cin >> keyword;
    correct_keyword(keyword);

        for (int row = 0; row < 5; row++)
        {
            for (int col = 0; col < 5; col++)
            {
                keyword= array[row][col];
            }
        }
        for (int row = 0; row < 5; row++)
        {
            for (int col = 0; col < 5; col++)
            {
                cout << keyword << " ";
            }
            cout << endl;
        }

        return 0;
}

bool correct_keyword(char keyword)
{
    bool correct = false;
    if (keyword != correct)
        return true;
    else
        return 1;
}

任何帮助都将不胜感激!!多谢各位

如果您已经在2D数组(5x5)中声明了字母表,比如在
字符字母表[5][5]
中,您可以使用嵌套for循环打印这些值:

for (int i = 0; i < 5; i++)
    for (int j = 0; j < 5; j++)
        std::cout << alphabet[i][j] << std::endl;
for(int i=0;i<5;i++)
对于(int j=0;j<5;j++)

std::cout为什么不使用
std::string
来存储关键字?它提供了
.find()
来检查是否包含字符。您不必担心2D数组,您所需要的只是
std::string
和一个计数器,您可以在5x5网格中提供输出的每5个字符后输出
'\n'

如何处理具有重复字符的关键字?它们只是被认为是无效的关键字吗?关于
“向导”
它是否同样是无效的关键字,因为它包含排除的
“z”
字符?(我想两者都必须是,否则您将无法在5x5网格中填充
'y'

话虽如此,您只需将关键字作为程序的第一个参数,并保留一个输出字符数计数器,然后执行以下简单操作:

#include <iostream>
#include <string>

#define WIDTH 5

int main (int argc, char **argv) {

    std::string s = argc > 1 ? argv[1] : "help";
    size_t n = 0;
剩下的就是输出关键字,然后是字母表中的剩余字符(减去
'z'
)。你可以用两个循环来完成,例如

    for (; n < s.size(); n++) {     /* output keyword, keep n as count */
        if (n && n % WIDTH == 0)    /* impose WIDTH no. chars per-line */
            std::cout << '\n';
        std::cout << " " << s.at(n);
    }


    for (int i = 'a'; i < 'z'; i++) {   /* output alphabet, skipping chars */
        if (s.find((char)i) == std::string::npos) {
            std::cout << " " << (char)i;
            n++;
            if (n && n % WIDTH == 0)
                std::cout << '\n';
        }
    }
“缺席”
作为关键字:

$ ./bin/alphabet
 h e l p a
 b c d f g
 i j k m n
 o q r s t
 u v w x y
$ ./bin/alphabet absent
 a b s e n
 t c d f g
 h i j k l
 m o p q r
 u v w x y
或无效的关键字:

$ ./bin/alphabet hello
error: 'l' duplcate char.

您可以自由使用2D数组,但这似乎会使关键字的输入和存储复杂化。仔细检查一下,让我知道这样做是否有效,以及您是否还有其他问题。

到目前为止,您尝试了什么?目前为止,我所拥有的就是打印二维数组的正确格式。如果您能展示您编写的代码,那会更好。这里有一个我迄今为止所做的示例是
“您好”
认为关键字无效,因为它有重复的
'l'
字符?
“向导”
也将是无效的关键字,因为它包含
“z”
?好的。所以它成功了。但是如何将关键字也打印到数组中。要编写字母表,您可以使用我编写的循环,但不要使用
std::cout
来打印字母,您应该使用
alphabet[I][j]='a'+I*5+j(因为您可以向字符添加整数以按ASCII值移动)。当涉及到您自己的单词时,您必须修改两个循环,因此
i
j
是一些给定的起始值,但请注意只输入单词中的字母,也不要尝试在末尾放置长单词,因此,您不会超过分配给数组的内存。我如何将其放在我迄今为止所做的上述工作中?我没有注意到字母表是如何变化的,对此我很抱歉。实际上,我有一个
bool
数组,它将存储字母是否被使用的信息,然后在单词被放入数组后(每个字母一个接一个,改变字母对应值的bool值-假设a=0,b=1,…),我将开始使用
字母[I][j]插入字母表='a'+i*5+j
,但在检查我们要设置的字母是否已被使用后。
#include <iostream>
#include <string>

#define WIDTH 5

int main (int argc, char **argv) {

    std::string s = argc > 1 ? argv[1] : "help";
    size_t n = 0;

    for (size_t i = 0; i < s.size() - 1; i++)   /* check for duplicate chars */
        if (s.find(s.at(i), i+1) != std::string::npos) {
            std::cerr << "error: '" << s.at(i) << "' duplcate char.\n";
            return 1;
        }
    if (s.find('z') != std::string::npos) {     /* check for 'z' in input */
        std::cerr << "error: input contains 'z'.\n";
        return 1;
    }

    for (; n < s.size(); n++) {     /* output keyword, keep n as count */
        if (n && n % WIDTH == 0)    /* impose WIDTH no. chars per-line */
            std::cout << '\n';
        std::cout << " " << s.at(n);
    }


    for (int i = 'a'; i < 'z'; i++) {   /* output alphabet, skipping chars */
        if (s.find((char)i) == std::string::npos) {
            std::cout << " " << (char)i;
            n++;
            if (n && n % WIDTH == 0)
                std::cout << '\n';
        }
    }
}
$ ./bin/alphabet
 h e l p a
 b c d f g
 i j k m n
 o q r s t
 u v w x y
$ ./bin/alphabet absent
 a b s e n
 t c d f g
 h i j k l
 m o p q r
 u v w x y
$ ./bin/alphabet hello
error: 'l' duplcate char.