我想字符串, 對於如內更換子內更換子:字符串是aa0_a a1_b b3_c * a0_a, 所以我想,以取代b1_a的子a0_a,但我不希望aa0_a被替換。 基本上,子字符串「a0_a」(將被替換)之前和之後都不應出現字母表。一個字符串C++
一個字符串C++
回答
這正是正則表達式擅長的。它自C++ 11以來就存在於標準庫中,如果你有一箇舊版本,你也可以使用Boost。
使用標準庫版本,你可以做(ref):
std::string result;
std::regex rx("([^A-Za-Z])a0_a[^A-Za-Z])");
result = std::regex_replace("aa0_aa1_bb3_c*a0_a", rx, "$1b1_a$2");
(請注意:未經測試)
謝謝,它的工作,唯一的事情是,1美元打印整個rx子字符串,而我們只想要該字符串的第一個字符 – user2665673
括號分隔字符串這個..([^ A-Za-z])(a0_a)..正則表達式把它分成兩部分,所以$ 1只會取第一部分,即[^ A-Za-z] – user2665673
如果你遍歷每個角色,就足夠簡單了。一些僞代碼:
string toReplace = "a0_a";
for (int i = 0; i < myString.length; i++) {
//filter out strings starting with another alphabetical char
if (!isAlphabet(myString.charAt(i))) {
//start the substring one char after the char we have verified to be not alphabetical
if (substring(myString(i + 1, toReplace.length)).equals(toReplace)) {
//make the replacement here
}
}
}
請注意,在查看子字符串時,您需要檢查索引超出範圍。
是的,那將工作的小字符串,但我不會做這個操作很多次,遍歷字符串的每個字符將是繁瑣的..... – user2665673
所以,每次我們可以查找子字符串,然後檢查位置(索引-1)處的字符,是一個字母..... 有沒有更快的方式,直到現在我正在使用boost: :replace_all,想要一個類似的功能,可以考慮到這個條件以及 – user2665673
- 1. Tokenize一個C字符串
- 2. 字符在C另一個字符串
- 3. C - 從另一個字符串中減去一個字符串
- 4. C++將整個字符串拆分爲另一個字符串
- 5. 將多個字符串作爲一個字符串讀取? C++
- 6. 拆分一個字符串並組合2個字符串 - C
- 7. C#:如何獲得一個字符串的第一個字符?
- 8. 輸出一個字符串中的一個字符c#
- 9. C - 檢查字符串是否是另一個字符串的子字符串
- 10. 不能讓atoi採取一個字符串(字符串與C字符串?)
- 11. 如何在C#中提取字符串一個字符串的
- 12. 檢查C++中的另一個字符串中的字符串
- 13. 如何從一個字符串使用C#子字符串?
- 14. C++將字符串參數分配給一個字符串
- 15. C#將字符串放在另一個字符串之前
- 16. C字符串的值設置爲一個字符串
- 17. C#得到另一個字符串中的字符串
- 18. C#添加字符串到另一個字符串
- 19. 從字符串數組中獲取第一個字符串c
- 20. C++中的字符串創建一個字符串數組
- 21. c傳遞一個字符串到函數然後返回一個字符串
- 22. C++將一個字符串的元素分配給一個新的字符串
- 23. 遍歷C字符串:得到一個字符串的最後一個單詞
- 24. 將一個UTF8字符串轉換爲一個UTF16字符串在c + +
- 25. C++連接一個查詢字符串的所有值成一個字符串
- 26. C中傳遞一個字符串函數,那麼返回一個字符串
- 27. C# - 在行旁邊寫一個字符串或刪除一個字符串
- 28. 從一個字符串中刪除一個子字符串,使用memmove在C
- 29. C字符串字符串
- 30. C++字符串!=字符串
的[用一個字符串替換字符串的一部分(HTTP可能重複:// stackoverflow.com/questions/3418231/replace-part-of-a-string-with-another-string) –
看到這個鏈接http://www.cplusplus.com/reference/string/string/replace/ – Shiv