问题描述
- 编写一个程序,要求如下:
-
从标准输入读取一个字符串,存入一个动态分配的字符数组中。如何处理变长输入。(C++)是书上动态内存这一章的习题,所以指定用数组解。
解决方案
A)
A.1)先分配一个指定长度(假定是n)。
A.2)逐个字节读,
A.3)读到指定长度到了之后,重新分配一个n+10;把已读的赋值过来,继续读。
A.4)重复A.2),直到读完
B)
B.1)先分配一个指定长度(假定是n)+一个指向字符的指针。
B.2)逐个字节读
B.3)读到指定长度到了之后,再分配一个n+一个指向字符的指针;把前一个的指针指向这个块
B.4)重复B.2)直到读完
解决方案二:
使用vector<string>
解决方案三:
先求出输入长度,然后再动态分配内存。
解决方案四:
抛弃字符数组,使用字符串吧。(注意这是指字符数组:类似char arrChar_1[] = {'a','b','','d','e'}; ,而不是字符串数组。)
STL+string,才是c++的用法
解决方案五:
#include
#include
using namespace std;
int main(void)
{
char ch;
int i=1;
char *before = new char[1],*temp;
while (cin >> ch)
{
temp = new char[i];
temp[i - 1] = ch;
for (int j = 0; j < i - 1; j++)
temp[j] = before[j];
delete[] before;
before = temp;
++i;
}
for (int j = 0; j < i - 1; j++)
cout << temp[i];
}
解决方案六:
#include
#include
#include
char strdup(char const *string) /从标准输入读取一个字符串把字符串复制到动态分配的内存中,并返回字符串的拷贝*/
{
char cp;
//int i;
cp = malloc((int)strlen(string) + 1);
if (cp != NULL)
{
printf("successful memoryn");
strcpy(cp, string);
}
return cp;
}
void main() /测试函数, 总是运行到一半就没结果了.*/
{
char ch;
char *string = "";
char *str = string;
while (( ch = getchar() ) != EOF)
{
*string++ = ch;
}
puts(strdup(str));
}
void main() /测试函数改成这样就能输出结果,但是这不是我想要的方式,我想让他从终端读取输入的字符串,再把字符串复制到动态分配的内存中,并返回到字符串的拷贝./
{
char *string = "huangpei";
puts(strdup(str));
}
解决方案七:
抱歉,上面是错的,
http://bbs.csdn.net/topics/370168078这里有讨论