我想從一個數組中複製一組字符,從一個索引到另一個。 例如我有一個數組char array[64]
,我想從5-15中選擇字符並將它們存儲在另一個字符數組中。 我可以用for循環來做到這一點,但是有沒有什麼功能可以做到這一點?像C#方法Substring一樣。提前致謝。從陣列的C/C + +副本
回答
您總是可以使用memcpy
來實現這一點,無論如何它會更有效率。
char a[100] = {0};
char b[100] = {1};
memcpy(&a[10], &b[30], 10);
這基本上沒有任何操作。您將零複製到零。 – juanchopanza
這是一個例子,不是生產代碼。 – Devolus
這是一個非常C風格的解決方案(可能有問題保證),但它通常不會被認爲是很好的C++代碼。 – RichardPlunkett
在C中,您可以使用memcpy
標準庫函數。
memcpy
或memmove
將一次移動整個塊並消除循環。
C++:使用std::copy_n
:
#include <algorithm>
int main() {
char a[100] = {0};
char b[100] = {1};
std::copy_n(&a[10], 10, &b[30]);
}
#include <string.h>
char array[64];
char new_array[12]; /* 12th char for '\0' */
/* put some data into array */
/* copy chars 5-15 (11 chars) from array to new_array */
strncpy(new_array, &array[4], 11);
請添加一些解釋。 – DontVoteMeDown
有什麼更清楚的嗎? – bph
這不是我。有人將此標記爲低質量,我只是建議您添加一些解釋而不是關閉。無論如何,你選擇。如果你是char 5之後, – DontVoteMeDown
有幾種方法。例如,您可以使用標準C函數strncpy
。例如
strncpy(dest, source + 5, 11);
或者您可以使用標準C++算法std::copy
。例如
std::copy(source + 5, source + 16, dest);
或者你可以使用標準算法`std :: copy_n。例如
std::copy_n(source + 5, 11, dest);
但是如果你會使用lambda表達式,然後可以使用此操作的一套標準算法將被放大。:)
你真的問了兩個完全不同的問題, (到目前爲止)你所得到的大部分答案都只專注於一個答案。
他們回答的是如何複製數組中的字符。
然而,在您的問題結束時,您會說:「就像C#方法Substring一樣。」這真的指向一個完全不同的方向:至少在C++(但不是C)中,C#的最接近的子字符串是std::string
的substr
。例如:
std::string a("12345678");
std::string b = a.substr(2,3); // b == 345
std::string
還提供了一些可以讓你創建一個字符串的另一個子構造的,所以你可以實現與同樣的效果:
std::string b = std::string(a, 2, 3);
我立即建議:如果你要編寫C++,編寫真正的C++。特別是在語法相似的情況下,很容易將C++看作C,並帶有一些額外的花裏胡哨的功能。
在現實中,良好的書面C++通常爲良好的書面C.相當不同。在良好C++,原始陣列,原始指針,和類似strncpy
和memcpy
功能通常是非常罕見的。 C++的主要優勢之一是支持相對較高級別的抽象,而且效率很低或沒有懲罰。我建議利用它。
- 1. BASH陣列副本
- 2. d2:重疊陣列副本
- 3. PHP遞歸陣列副本
- 4. 陣列副本中的PHP對象
- 5. C#工會和陣列副本
- 6. PInvoke,指針和陣列副本
- 7. java對角線2d陣列副本
- 8. 從陣列中刪除有副作用
- 9. 打印出來的副本與副本中的紅寶石陣列量
- 10. 從陣列的副本中刪除項目而不將其從陣列中刪除
- 11. Couchbase從副本
- 12. 讀數據從一個文件的副本的陣列用於寫入
- 13. 如何把一個對象的副本到陣列中的PHP
- 14. 從GeoJSON的陣列
- 15. 切片陣列與對象和獲取陣列與對象副本
- 16. Python列表副本
- 17. Numpy:新維矩陣的堆棧副本
- 18. 矩陣類的深層副本
- 19. awk從2列刪除鏡像副本
- 20. PHPmailer - 從下拉列表中的CC
- 21. 執行陣列的深層副本時遇到問題
- 22. 跨進程COM Marshaller:減少大型陣列的副本數
- 23. CUDA中的動態分配陣列副本
- 24. 陣列副本,第二個沒有最後的位置
- 25. 合併排序:是否需要額外的陣列副本?
- 26. 副本陣列爲xml不能改變的XML標籤標題
- 27. 不適用於複製陣列的角度副本
- 28. 使用陣列副本的數組存儲異常
- 29. 刪除陣列中除1個以外的所有副本 - JavaScript
- 30. 副本未知大小的數組到另一個陣列
使用'std :: copy'?順便說一下,這些雙語問題並不是很有成效。 – juanchopanza
如果您搜索'strncpy()'和/或'std :: copy()',我很肯定你會找到很多答案。 –