C++ c+中的字符矩阵+;

C++ c+中的字符矩阵+;,c++,matrix,char,C++,Matrix,Char,我需要字符矩阵来保存“n”主题(有些主题有3-4个单词)。用户将输入“n”个科目编号和科目名称。我只能使用CHAR,不能使用STRING或VECTOR #include <iostream> using namespace std; int main() { int n; cin>>n; char matrix[n][100]; for(int i=0; i<n; i++) { cin.getline(matrix[i][100]); }

我需要字符矩阵来保存“n”主题(有些主题有3-4个单词)。用户将输入“n”个科目编号和科目名称。我只能使用CHAR,不能使用STRING或VECTOR

#include <iostream>
using namespace std;
int main() {
  int n;
  cin>>n;
  char matrix[n][100];
  for(int i=0; i<n; i++) {
    cin.getline(matrix[i][100]);
  }

}
#包括
使用名称空间std;
int main(){
int n;
cin>>n;
字符矩阵[n][100];

对于(int i=0;i),您的代码的第一个问题是,您试图用静态分配来生成一个可变大小的数组,其中C++不喜欢(您的<强> n>强>不同,并且您试图生成字符矩阵[<强> n < /强> [100 ] ]。 第二个问题是,需要一个额外的参数才能工作(每个单词最多可以输入100个字符)

第三个问题是,在cin.getline(matrix[i][100]);中,您试图将整个单词放在单个字符的位置。我不确定您是否理解为什么要创建一个matrix[n][100],因此我将简要解释

一个字符存储单个字符,如“a”

char oneCharacter = 'a';
要从这些字符中生成一个单词,您需要几个字符,因此您需要创建一个字符数组。在示例中,我创建了一个字符数组,最多可以包含5个字符

char multipleCharacters[5];
现在你想存储几个单词,所以你要创建一个字符数组。在这个例子中,我创建了一个字符数组,最多可以占用10个单词,5个字符。要创建一个你要输入的大小的数组,请从我答案的第一部分查找动态分配

char multipleWords[10][5];

知道了这一点,你能找出cin.getline(matrix[i][100])的错误吗?

正如我在前面的评论中所说的,这是一个糟糕的任务。你被要求以“奇怪”的方式做一些事情,而不是使用和学习编写代码的最佳实践

一般来说,我的建议是:从分离输入、输出和“工作”开始

让我们假设这里的真实的代码都在“工作”部分。学习这样操作内存确实有很多原因,C++编写低级、系统或高效代码是该技术的主要部分。

>,你想把n个单词排列成一个二维字符数组,只需把它用普通C++代码传递给它,就可以把它抽象成一个类来保存数据。这可能是二进制图像发送到一个KoSK上的哑LCD,或者是标签打印机?这样做可能有一个真正的原因。 放入一个类可以确保正确释放内存;通常,您希望代码中没有裸

新的
,并且将使用现有的容器类型而不是低级内存。这里,我们将使用一个
唯一的行

class project {
    static constexpr size_t rowlen = 100;
    using row = char[rowlen];
    std::unique_ptr<row[]> matrix;
public:
    void layout (const vector<string>& inputs);
    // todo.. provide a good way to access the data
};
有关std算法的详细信息,请参阅。将该站点保持为书签状态;这是编写代码时查找内容的一种好方法


要做到这一点,您需要了解指针在C中(因此在C++中)是如何工作的可以是不同的类型:指向整行的指针与该行的第一个字符的地址相同,但它们是不同的类型。因此,一次只做一点事情,就像前面定义的
矩阵

你的问题是什么?我无法正确输入主题名称。你遇到了什么问题?我不知道现在如何在这个矩阵中输入受试者的名字:(你能做一行吗?<代码> char行[100 ];CIN。GETLINE(行);< /Cord>?BTW,G+使C的动态数组在C++中没有任何诊断,所以<代码> char a[n]J.U.OgSZ看起来像是在简单的例子中工作。“JD”UGOSZ看起来我也学到了一些新东西。这篇文章的作者似乎是C++的新手,所以我不知道如何在我的答案中解释它,而不必用信息超载,所以我会把它原封不动。谢谢。我同意它是错误的,当我在真实代码中看到它时,它就不知道它为什么会这样。en编译。我只是指出它可能为他编译过,而我们认为它不应该。到目前为止,我们只做了循环、数组、字符数组,还没有做动态分配、向量、字符串。用户如何输入主题名称?
 void project::layout (const vector<string>& inputs)
 {
     constexpr auto N = input.size();
     matrix = new row[N];
     for (const size_t i= 0;  i < N;  ++i) {
         const auto len = std::max(input[i].size(), rowlen);
         auto& dest = matrix[i];  // alias the whole row
         char* p= &dest[0];  // pointer to first char in the row
         std::copy_n (input[i].data(), len, p);
         std::fill_n (p+len, rowlen-len, ' ');
     }
 }