日志9
去除前导零
详细解释
cpp复制代码size_t start_pos = s.find_first_not_of('0');
- 功能:使用 find_first_not_of('0') 找到字符串中第一个不是 '0' 的字符的位置索引。
- 返回值:如果找到这样的字符,返回其在字符串中的索引位置。如果字符串全是 '0' 或为空,返回 string::npos(表示未找到)。
cpp复制代码if (start_pos != string::npos) { return s.substr(start_pos); }
- 功能:当 start_pos 不等于 string::npos 时,表示字符串中存在非零字符。使用 substr(start_pos) 截取从第一个非零字符到末尾的子字符串,即去掉前导零的部分。
cpp复制代码return "0";
- 功能:如果 start_pos == string::npos,说明字符串中全是 '0'。此时返回单独的 "0",表示结果是零。
举例分析
输入1:s = "00012345"
cpp复制代码size_t start_pos = s.find_first_not_of('0'); // start_pos = 3 s.substr(start_pos); // 返回 "12345"
输入2:s = "0000"
cpp复制代码size_t start_pos = s.find_first_not_of('0'); // start_pos = string::npos return "0"; // 返回 "0"
输入3:s = "123456"
cpp复制代码size_t start_pos = s.find_first_not_of('0'); // start_pos = 0 s.substr(start_pos); // 返回 "123456"