我想追加一个字符串到现有数组的开头。追加到数组的开头
char array[50] = {5,A,0,1,0,0,1,1};
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};
我知道我们可以使用memcpy或strcat追加到数组。但我想追加到我现有的数组的开始。你能告诉我怎么样?谢谢。
我想追加一个字符串到现有数组的开头。追加到数组的开头
char array[50] = {5,A,0,1,0,0,1,1};
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};
我知道我们可以使用memcpy或strcat追加到数组。但我想追加到我现有的数组的开始。你能告诉我怎么样?谢谢。
不是没有复制元素 - 任何原因不使用C++ std :: vector?
std::vector<char> array;
array.push_back(5); // adds to end
array.push_back(A);
// insert a new array at beginning
char myarray [] = { 1,2,3 };
array.insert (array.begin(), myarray, myarray+3);
如果您需要在前面一个std :: deque的是更有效,但以其他方式插入的东西是相同的一个载体
std::deque<char> array;
array.push_back(5); // adds to end
array.push_back(A);
array.push_front(4); // inserts at front
你能告诉我如何使用它吗?因为我是C++的新手。谢谢。 – Kiran
这不可能不使用memcpy
或类似的工作要做移动内存中的元素。该数组是一段连续的内存,并且已经填充了该内存的开始,因此在开始时没有空格来追加任何元素。您需要将当前元素从数组的开头移开,然后可以在开始时插入元素。否则,考虑使用std::vector<T>
,它允许你插入在任意位置的元素,并采取走动
非常简单的方法需要的元素做到这一点的关心是使用std::string
而不是字符数组作战:
std::string s = ", world!";
s = "Hello" + s;
我假设你真的在使用字符串,我已经采取了一些步骤。如果它确实是你想要的一系列字符,那么可以用std::vector
来代替。
我看到你能做的唯一的事情就是把你的数组移到右边,并在开头写第一个元素。
for (int i = 48 ; i >= 0 ; i--)
{
array[i+1] = array[i];
}
array[0] = firstElement[0];
您的字符串的总lenght必须小于50,否则,你将失去多余的字符
你也可以使用一个列表。您将能够在一开始追加无需重写字符
总长度定义> 176。在这种情况下我能做些什么? – Kiran
我说50是因为你声明了'int array [50]'。但是如果你使用177或另一个数字声明一个数组,那么就没有问题了。如果大小为'n',则使用以下这行:for(int i = n-2; i> = 0; i - )'。 –
你在你的代码的几个错误:
char array[50] = {5,A,0,1,0,0,1,1};
你所有的值(不包括A,我的猜测是一个变量)不是字符(在技术上,他们可能会被铸造,但这是不正确的)。因为“F”,“s”和“S”不是字符,而是字符串(或char *),所以这两个数组也是不正确的。
尽管这样,我认为解决问题的最好办法是使用std:String
和功能append
:
string str1 ="Frist string";
string str2 ="Second string";
str1.append(str2);
没有memcpy
也不需要,您正在使用C++ strcat
,不C,趁它!
使用'char'或'unsigned char'来存储单个字节并不少见,因为C没有'byte'数据类型。 –
在您的代码下面的声明不会编译:
A
是恒定的,未申报
char arr[50] = {5,A,0,1,0,0,1,1};
你想要一个字符'F'
,当你说,"F"
它代表一个字符串。请注意,'\0'
空字符在初始化char数组时隐式添加。
char firstElement[] = {"F"};
与上述相同,在这种情况下,你有太多intializers,因此应该有's' and 'S'
char secondElement[] = {"s", "S"};
为了简化拷贝,C++提供你std::string可用于追加两个字符串在任何结束。
std::string first = "F";
std::string second = "sS";
second.append(first);
first.append(second); // OR
没有什么特别之处在C.数组的开头插入这是相同的如在任何地方插入是,它是低效率的,因为它涉及移动整个阵列:
改变你的整个阵列使用
memcpy(array + 3 * sizeof(char), array, 8 * sizeof(char));
副本的权利在自己的位置的新元素:
memcpy(array, firstElement, sizeof(firstElement));
memcpy(array + sizeof(firstElement), secondElement, sizeof(secondElement));
另外,您应该使用单引号将数组声明更正为char数组。
与其他指出的一样,如果使用C++编写程序,则应该使用std::string
。
你的代码块的第三行会产生编译器错误。你正试图在char数组中打包两个char *。 – Antoine
小调词汇调整:* append *在最后,* prepend *在开头。 –