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