好心人进下,二维字符数组输入问题,动态分配空间(C++)

来源:百度知道 编辑:UC知道 时间:2024/06/08 14:30:04
刚刚想到的一个问题:定义一个二维字符数组ch[m][n],根据用户输入确定m,n的大小
要求:
1.输入方式为每行输入1到100个字符,第一行行表示ch[0][0]到ch[0][n-1],第二行表示ch[1][0]到ch[1][n-1].....第m行表示ch[m-1][0]到ch[m-1][n-1]。
2.最后一行输入:‘e’‘n’‘d’,根据此end判断输入结束.
3.输出为n行,前n-1行表示每行的字符数量,最后一行输出除‘e’‘n’‘d’行外的行数。
4.m和n不能预先给出,而是动态分配空间,由输入确定。
例如输入
adadas
fdsff
dfsdf
end
就会输出
6
5
5
3
看来我的描述有问题,m和n并不是用户用cin>>m>>n确定的,而是通过读入用户输入的字符数量确定的,目的只是为了不浪费储存单元,如果预先就定义ch[100][100],这样会很浪费,我的意思是按需分配,用户输入多少个字符就分配多少储存单元。
用new和delete能实现吗?
另外如何判断行结束,用
for(int i=0;ch[i-1][0]!='e'||ch[i-1][1]!='n'||ch[i-1][2]!='d';i++;)
for(int j=0;ch[i-1][j-1]!='\n';j++)
能实现吗?

//这个问题用STL解决最适合
//全部都是根据用户输入动态决定,而且基本没有上限限制
#pragma warning(disable: 4786)
#include <iostream>
#include <vector> //STL动态数组
#include <string> //STL字符串

using namespace std; //引用std空间中的全部名称

int main()
{
vector<string> vs; //string是一个动态的字符数组,vector<string>就相当于你说的ch[m][n],并且是一个动态的
string strIn;
while(1)//循环接受用户输入
{
cin>>strIn;
if("end"==strIn)break; //直到输入end退出循环
vs.push_back(strIn);
}
for( long i = 0; i < vs.size(); ++i ) //循环遍历vs
{
cout<<vs[i].size()<<endl; //输出每个字串的大小,也就是每行的字符数量
}
cout<<vs.size()<<endl; //输出vs的大小,也就是你所说的n行

return 0;
}

根据题目要求,n可以设为101没问题,但m的大小不可能由用户输入来定,你只有两种选择:(1)把m设的足够大,以保证你的输入行数不会超过它;(2)动态数组.可以用指针和整型变量联合实现,也可以用vector库.

初学的题目不要用vector

lz应该先去看 数据结构 的那套视频讲座

同意楼上的
可以用vector<string>作弊 然后再申请空间
不过用2维数组来存放字符