我试图将一个字符串附加到现有数组的开头。
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 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 array; array.push_back(5); // adds to end array.push_back(A); array.push_front(4); // inserts at front
最简单的方法是使用std::string
而不是与字符数组作战:
std::string s = ", world!"; s = "Hello" + s;
假设你真的在使用字符串,我已经有了一些飞跃。 如果它确实是你想要的一个字符数组,那么也许使用std::vector
。
您的代码中有几个错误:
char array[50] = {5,A,0,1,0,0,1,1};
所有的值(不包括A,我猜是变量)都不是字符(从技术上讲,它们可以被转换,但这不正确)。
char firstElement[] = {"F"}; char secondElement[] = {"s", "S"};
这两个数组也是不正确的,因为“F”,“s”和“S”不是字符,而是字符串(或char *)。
尽管如此,我认为解决问题的最佳方法是使用std:String
和函数append
:
string str1 ="Frist string"; string str2 ="Second string"; str1.append(str2);
不需要memcpy
或strcat
,你使用C ++而不是C,利用它!
在C中的数组的开头插入没有什么特别之处。它与在任何地方插入相同,而且效率低,因为它涉及移动整个数组:
此外,您应该使用单引号将数组声明更正为char数组。
正如其他人指出的那样,如果用C ++编写程序,则应该使用std::string
。
我唯一能看到的就是将你的数组移到右边并在开头写下第一个元素。
for (int i = 48 ; i >= 0 ; i--) { array[i+1] = array[i]; } array[0] = firstElement[0];
你的字符串的总长度必须小于50,否则你将失去额外的字符
你也可以使用一个列表。 你可以在开头追加而不重写字符
如果不使用memcpy
或类似方法移动内存中的元素,则无法完成此操作。 数组是一个连续的内存,你已经填满了内存的开头,因此在开始时没有空间来附加任何元素。 您需要将当前元素从数组的开头移开,然后您可以在开始时插入元素。 否则请考虑使用std::vector
,它允许您在任意位置插入元素,并负责移动当前元素
在您的代码中,以下声明将无法编译:
A
是不变的,未经宣布的
char arr[50] = {5,A,0,1,0,0,1,1};
你想要一个字符'F'
,当你说, "F"
它代表一个字符串文字。 请注意,初始化char数组时会隐式添加' '
0’null字符。
char firstElement[] = {"F"};
同上,在这种情况下你有太多的初始化者,因此你应该有'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/c++开发分享附加到数组的开头相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/550098.html