C++ 如何用单词填充二维字符数组?

C++ 如何用单词填充二维字符数组?,c++,C++,您知道如何用流中的单词填充数组吗?这是我目前所能做到的: ifstream db; db.open("db") //1stline: one|two|three, 2d line: four|five|six.... int n=0,m=0; char a[3][20]; char c[20]; while(db.get(ch)) { if(ch=='|') { a[0][m]=*c; m++; } else { c[n]=

您知道如何用流中的单词填充数组吗?这是我目前所能做到的:

ifstream db;
db.open("db") //1stline: one|two|three, 2d line: four|five|six....
int n=0,m=0;
char a[3][20];
char c[20];
while(db.get(ch)) {
    if(ch=='|') {
        a[0][m]=*c;
        m++;
    }
    else {
        c[n]=ch;
        n++;
    }
}

所以它看起来像{{一,二,三},{四,五,六},{七,八,九},}

为了保存一个二维的“单词”(字符串)数组,需要一个三维的字符数组,因为字符串是一维的字符数组

您的代码应该如下所示:

int i=0;//二维矩阵中的当前位置
//(如果将其转换为一维矩阵)
int o=0;//字符串中的字符位置
int nMax=20;//矩阵的行数
int mMax=3;//矩阵中的列
int oMax=20;//最大字符串长度
字符a[nMax][mMax][oMax]={0};//包含字符串的矩阵,零填充以初始化
字符分隔符=“|”;
而(db.get(ch)){//假定此行使用流中的下一个字符填充ch
if(ch==分隔符){
i++;//增量矩阵元素
o=0;//重新启动字符串位置
}
否则{
o++;//递增字符串位置
a[i/mMax][i%mMax][o]=ch;
}
}
对于输入流
“一|二|三|四|五|六|七”
这将返回一个字符串数组,如下所示:


< {“一”、“二”、“三”}、{“四”、“五”、“六”}、{“七”} < /COD> < /P> < P> >可以使用C++对象,如<代码> vector < /C> >和<代码>字符串< /代码>。C中的二维数组对应于C++中的向量向量。二维数组中的项是字符串,因此下面的语法是

vector

#include <vector>
#include <string>
#include <sstream>
using std::vector;
using std::string;
using std::istringstream;
vector<vector<string> > a;
string line;
while (getline(db, line, '\n'))
{
    istringstream parser(line);
    vector<string> list;
    string item;
    while (getline(parser, item, '|'))
        list.push_back(item);
    a.push_back(list);
}
#包括
#包括
#包括
使用std::vector;
使用std::string;
使用std::istringstream;
载体a;
弦线;
while(getline(db,line,'\n'))
{
istringstream解析器(行);
向量表;
字符串项;
while(getline(解析器,项“|”))
列表。推回(项目);
a、 推回(列表);
}

这段代码(未测试;为可能的语法错误感到抱歉)使用“字符串流”来解析输入行;它不假设每行有3个项目。根据您的具体需要进行修改。

请改进您的代码。什么是db?其他功能是什么?为了支持输入格式(1stline:one | two | three,2dline:four | five | six…),您可能还需要添加
char delimiter2='\n'