我有以下代码:
.map_async()
我应该编写完全相同的代码,但不包括#include <iostream>
#include <string>
using namespace std;
int main(){
string text;
string * OldArray = nullptr;
string * NewArray = nullptr;
unsigned int counter = 0;
cout <<"Enter StringS" <<endl;
while(true){
cin >> text;
if (text.find("End") != string::npos ) break;
NewArray = new string[counter +1];
for(int i = 0; i < counter; i++){
NewArray[i] = OldArray[i];
}
NewArray[counter] = text;
delete [] OldArray;
OldArray = NewArray;
counter++;
}
for (int i = 0; i< counter; i++){
cout << OldArray[i];
}
return 0;
}
头。
因此,基本上,我必须将字符串写为<string>
,并使字符串指针成为指向多个char []
的指针的数组。
问题是,我不知道如何正确执行操作。
我通常会尝试执行以下操作:
char[]
我将不得不使用某种功能来复制从某个地址范围开始的数据。有什么想法怎么做的吗?
另外,请注意,此解决方案迫使我创建固定大小的char数组,而在使用字符串时,不必定义字符串的大小-不会创建浪费500个字符的char数组与字符串比较的内存?如果是这样,在没有字符串类的C语言中如何解决问题?
答案 0 :(得分:0)
按照您的要求进行操作,尝试以下操作:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[500];
char ** OldArray = nullptr;
char ** NewArray = nullptr;
unsigned int counter = 0;
size_t textlen;
cout << "Enter Strings: " << endl;
while (cin.get(text, 500, ' ')) {
if (strstr(text, "End")) break;
NewArray = new char*[counter+1];
for(int i = 0; i < counter; ++i) {
NewArray[i] = OldArray[i];
}
textlen = strlen(text) /* or: cin.gcount() */ + 1;
NewArray[counter] = new char[textlen];
strncpy(NewArray[counter], text, textlen);
delete [] OldArray;
OldArray = NewArray;
++counter;
}
for (int i = 0; i < counter; ++i) {
cout << OldArray[i] << " ";
}
for (int i = 0; i < counter; ++i) {
delete[] OldArray[i];
}
delete[] OldArray;
return 0;
}
答案 1 :(得分:0)
我将不得不使用某种功能来复制从某个地址范围开始的数据。有什么想法怎么做的吗?
C ++标准库具有用于复制的算法。它称为std::copy
。如果您可能不使用标准库,则可以使用循环,赋值运算符和指针算法来实现相同的算法。
与字符串相比,创建一个能够容纳500个字符的字符数组不是浪费内存吗?
是的
如果是这样,在没有字符串类的情况下,如何用C语言解决问题?
与std::string
本身的实现方式类似;毕竟,std::string
无法用于实现std::string
。尽管std::string
的基本数据结构可以在C中以及在C ++中实现,但是由于C没有类或异常,因此获取和释放内存的方式有所不同。
字符串只是对象序列的一种特例-它是字符序列。有几种可调整大小的数据结构可以表示一个序列。例如,std::string
和std::vector
是使用称为“动态数组”的数据结构实现的。
动态数组是通过使用指针来实现的,该指针指向动态分配的数组,并记录该数组的大小以及指向最后插入的元素(或元素数量)的指针。如果分配的空间用完,则会分配一个更大的新动态数组,将旧数组中的内容复制过来,然后释放旧数组。为了实现恒定的渐进复杂度(摊销),对于插入操作而言,以几何速率增长阵列很重要。