當使用string.substr
對字符串進行子串提取時,如果索引越界會導致程序運行時出現未定義行為。為了避免這種情況,可以在提取子串之前先判斷索引是否在有效范圍內,可以使用std::min
函數來確保索引不會超出字符串的長度。
以下是一個示例代碼:
#include <iostream>
#include <string>
#include <algorithm> // for std::min
int main() {
std::string str = "Hello, World!";
int start = 6; // starting index
int length = 10; // number of characters to extract
// Check if start index is within string length
if(start >= 0 && start < str.length()) {
// Calculate number of characters to extract without going out of bounds
length = std::min(length, static_cast<int>(str.length() - start));
std::string subStr = str.substr(start, length);
std::cout << "SubString: " << subStr << std::endl;
} else {
std::cout << "Invalid start index" << std::endl;
}
return 0;
}
在上面的示例中,我們首先檢查起始索引是否在字符串長度范圍內,然后使用std::min
函數計算要提取的字符數,確保不會超出字符串長度。這樣可以避免string.substr
索引越界的問題。