高手帮忙,关于字符串

来源:百度知道 编辑:UC知道 时间:2024/06/05 23:05:04
输入多个字符串时,为了节省内存空间,想用一个字符型指针数组来实现,(在书上看使用字符型指针数组时,都时预先定义好每个元素的指向的,如char *a[2]={"abc","ade"};),现在我可以先定义一个字符指针数组,而在用户使用程序时再对它赋值吗?
我编了这样:
char *a[2];
for(i=0;i<2;i++)
gets(a[i]);
这样行吗?
一样的解答依然是为每个字符串预先分配20个长度,若长度少于20,不就浪费了吗??

最高效地使用存储空间是我们程序员必须负责的!你的想法完全可以实现:

最合理的方案是实现一个动态字符串指针数组。这是一个两个维度都自适应的数组:
(1)指针数组的个数可以根据你输入的字符串数目动态增加,不会存在类似char *a[2]的语句(只能有2个字符串指针);
(2)每个字符串指针所指向的内存是与相应的有效字符串长度自适应的,绝不会浪费一点内存。

我使用C++ STL来实现的,源代码及注释如下(不明白的可以hi我):
#include<vector> // 可以装任何类型的动态数组容器(我们例子中就装char*)
#include<string> // 提供字符串对象
#include<iostream> // 标准输入输出流
using namespace std; // 使用名字空间std
#pragma warning(disable : 4996) // 屏蔽代号为4996的警告
void main(){
string str; // 自适应字符串缓存(无需设置缓存大小)
vector<char*> v_strPtr; // 以char*类型为元素的动态数组(一维)
bool bIsContinue = true; // 输入循环控制(第一个字符为空格则退出字符串输入)
do{
cout << "Please input a sentence(input <space> to quit):\n";
getline(cin, str, '\n'); // 获取输入的一行字符串(以回车为结束标志)
if(*(str.c_str()) == ' ')bIsContinue = false;
else{
char* pStr = new char[str.length() + 1]; // 动态分配字符串指针所指内存大小(自适应于字符串有效长度)
strcpy