137a09cd7Sopenharmony_ci/* 237a09cd7Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 337a09cd7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 437a09cd7Sopenharmony_ci * you may not use this file except in compliance with the License. 537a09cd7Sopenharmony_ci * You may obtain a copy of the License at 637a09cd7Sopenharmony_ci * 737a09cd7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 837a09cd7Sopenharmony_ci * 937a09cd7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1037a09cd7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1137a09cd7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1237a09cd7Sopenharmony_ci * See the License for the specific language governing permissions and 1337a09cd7Sopenharmony_ci * limitations under the License. 1437a09cd7Sopenharmony_ci */ 1537a09cd7Sopenharmony_ci 1637a09cd7Sopenharmony_ci#include "string_operation.h" 1737a09cd7Sopenharmony_ci 1837a09cd7Sopenharmony_ci#include <cmath> 1937a09cd7Sopenharmony_ci#include <cstdint> 2037a09cd7Sopenharmony_ci#include <limits.h> 2137a09cd7Sopenharmony_ci#include <string> 2237a09cd7Sopenharmony_ci 2337a09cd7Sopenharmony_cinamespace OHOS { 2437a09cd7Sopenharmony_cinamespace PowerMgr { 2537a09cd7Sopenharmony_cinamespace { 2637a09cd7Sopenharmony_ciconst uint32_t COMPARE_SUCCESS = 0; 2737a09cd7Sopenharmony_ci} 2837a09cd7Sopenharmony_civoid StringOperation::SplitString(const std::string& str, std::vector<std::string>& ret, const std::string& sep) 2937a09cd7Sopenharmony_ci{ 3037a09cd7Sopenharmony_ci ClearAllSpace(str); 3137a09cd7Sopenharmony_ci if (str.empty()) { 3237a09cd7Sopenharmony_ci return; 3337a09cd7Sopenharmony_ci } 3437a09cd7Sopenharmony_ci 3537a09cd7Sopenharmony_ci std::string temp; 3637a09cd7Sopenharmony_ci std::string::size_type begin = str.find_first_not_of(sep); 3737a09cd7Sopenharmony_ci while (begin != std::string::npos) { 3837a09cd7Sopenharmony_ci std::string::size_type pos = str.find(sep, begin); 3937a09cd7Sopenharmony_ci if (pos != std::string::npos) { 4037a09cd7Sopenharmony_ci temp = str.substr(begin, pos - begin); 4137a09cd7Sopenharmony_ci begin = pos + sep.length(); 4237a09cd7Sopenharmony_ci } else { 4337a09cd7Sopenharmony_ci temp = str.substr(begin); 4437a09cd7Sopenharmony_ci begin = pos; 4537a09cd7Sopenharmony_ci } 4637a09cd7Sopenharmony_ci 4737a09cd7Sopenharmony_ci if (!temp.empty()) { 4837a09cd7Sopenharmony_ci ret.push_back(temp); 4937a09cd7Sopenharmony_ci temp.clear(); 5037a09cd7Sopenharmony_ci } 5137a09cd7Sopenharmony_ci } 5237a09cd7Sopenharmony_ci return; 5337a09cd7Sopenharmony_ci} 5437a09cd7Sopenharmony_ci 5537a09cd7Sopenharmony_civoid StringOperation::ClearAllSpace(std::string s) 5637a09cd7Sopenharmony_ci{ 5737a09cd7Sopenharmony_ci std::string::size_type index = 0; 5837a09cd7Sopenharmony_ci if (!s.empty()) { 5937a09cd7Sopenharmony_ci index = s.find(' ', index); 6037a09cd7Sopenharmony_ci while (index != std::string::npos) { 6137a09cd7Sopenharmony_ci s.erase(index, 1); 6237a09cd7Sopenharmony_ci } 6337a09cd7Sopenharmony_ci } 6437a09cd7Sopenharmony_ci} 6537a09cd7Sopenharmony_ci 6637a09cd7Sopenharmony_cibool StringOperation::Compare(const std::string& origin, const std::string& target) 6737a09cd7Sopenharmony_ci{ 6837a09cd7Sopenharmony_ci if (origin.compare(target) == COMPARE_SUCCESS) { 6937a09cd7Sopenharmony_ci return true; 7037a09cd7Sopenharmony_ci } 7137a09cd7Sopenharmony_ci return false; 7237a09cd7Sopenharmony_ci} 7337a09cd7Sopenharmony_ci 7437a09cd7Sopenharmony_cibool StringOperation::Find(const std::string& origin, const std::string& target) 7537a09cd7Sopenharmony_ci{ 7637a09cd7Sopenharmony_ci if (origin.find(target) != std::string::npos) { 7737a09cd7Sopenharmony_ci return true; 7837a09cd7Sopenharmony_ci } 7937a09cd7Sopenharmony_ci return false; 8037a09cd7Sopenharmony_ci} 8137a09cd7Sopenharmony_ci 8237a09cd7Sopenharmony_cibool StringOperation::StrToUint(const std::string& str, uint32_t& value) 8337a09cd7Sopenharmony_ci{ 8437a09cd7Sopenharmony_ci if (str.empty() || (!isdigit(str.front()) && (str.front() != '-'))) { 8537a09cd7Sopenharmony_ci return false; 8637a09cd7Sopenharmony_ci } 8737a09cd7Sopenharmony_ci 8837a09cd7Sopenharmony_ci char* end = nullptr; 8937a09cd7Sopenharmony_ci errno = 0; 9037a09cd7Sopenharmony_ci auto addr = str.c_str(); 9137a09cd7Sopenharmony_ci auto result = strtoul(addr, &end, 10); // 10 means decimal 9237a09cd7Sopenharmony_ci if ((end == addr) || (end[0] != '\0') || (errno == ERANGE) || (result >= ULONG_MAX)) { 9337a09cd7Sopenharmony_ci return false; 9437a09cd7Sopenharmony_ci } 9537a09cd7Sopenharmony_ci value = static_cast<uint32_t>(result); 9637a09cd7Sopenharmony_ci return true; 9737a09cd7Sopenharmony_ci} 9837a09cd7Sopenharmony_ci 9937a09cd7Sopenharmony_cibool StringOperation::StrToDouble(const std::string& str, double& value) 10037a09cd7Sopenharmony_ci{ 10137a09cd7Sopenharmony_ci if (str.empty()) { 10237a09cd7Sopenharmony_ci return false; 10337a09cd7Sopenharmony_ci } 10437a09cd7Sopenharmony_ci 10537a09cd7Sopenharmony_ci char* end = nullptr; 10637a09cd7Sopenharmony_ci errno = 0; 10737a09cd7Sopenharmony_ci auto addr = str.c_str(); 10837a09cd7Sopenharmony_ci auto result = strtod(addr, &end); 10937a09cd7Sopenharmony_ci if ((end == addr) || (end[0] != '\0') || (errno == ERANGE) || (result == HUGE_VAL)) { 11037a09cd7Sopenharmony_ci return false; 11137a09cd7Sopenharmony_ci } 11237a09cd7Sopenharmony_ci value = result; 11337a09cd7Sopenharmony_ci return true; 11437a09cd7Sopenharmony_ci} 11537a09cd7Sopenharmony_ci} // namespace PowerMgr 11637a09cd7Sopenharmony_ci} // namespace OHOS 117