diff --git a/include/jianzhi_offer.h b/include/jianzhi_offer.h index 3c4af8e..56f8c58 100644 --- a/include/jianzhi_offer.h +++ b/include/jianzhi_offer.h @@ -44,6 +44,15 @@ public: * @return */ std::string reverse_left_words(std::string s, int n); + + /** + * 剑指 Offer 67. 把字符串转换成整数 + * + * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/58pq8g/ + * @param str + * @return + */ + int str_to_int(std::string str); }; class ListNode { @@ -72,10 +81,9 @@ public: * @return */ ListNode *reverse_list(ListNode *head); - ListNode* reverse_list(ListNode* cur, ListNode* pre); + ListNode *reverse_list(ListNode *cur, ListNode *pre); }; - class Node { public: int val; @@ -95,7 +103,7 @@ public: * @param head * @return */ - Node* copy_random_list(Node* head); + Node *copy_random_list(Node *head); }; /** @@ -123,6 +131,5 @@ private: * @param k * @return */ -std::vector max_sliding_window(std::vector& nums, int k); - +std::vector max_sliding_window(std::vector &nums, int k); } \ No newline at end of file diff --git a/src/jianzhi_offer/string.cpp b/src/jianzhi_offer/string.cpp index 8e87478..68011e2 100644 --- a/src/jianzhi_offer/string.cpp +++ b/src/jianzhi_offer/string.cpp @@ -45,4 +45,22 @@ bool String::is_number(std::string s) { return false; } + +int String::str_to_int(std::string str) { + int res = 0, bndry = INT_MAX/10; + int i = 0, sign = 1, length = str.size(); + if (length == 0) return 0; + while (str[i] == ' ') + if (++i == length) return 0; + if (str[i] == '-') sign = -1; + if (str[i] == '-' || str[i] == '+') i++; + for (int j = i; j < length; j++) { + if (str[j] < '0' || str[j] > '9') break; + if (res > bndry || res == bndry && str[j] > '7') + return sign == 1 ? INT_MAX : INT_MIN; + res = res*10 + (str[j] - '0'); + } + return sign*res; +} + } \ No newline at end of file diff --git a/tests/jianzhi_offer/string_test.cpp b/tests/jianzhi_offer/string_test.cpp index b89c9b7..dd12759 100644 --- a/tests/jianzhi_offer/string_test.cpp +++ b/tests/jianzhi_offer/string_test.cpp @@ -18,9 +18,17 @@ TEST(IsNumberTest, BasicAssertions) { ASSERT_FALSE(s.is_number("e9")); } -TEST(ReverseLeftWords, BasicAssertions) { +TEST(ReverseLeftWordsTest, BasicAssertions) { yaha::String s; ASSERT_EQ("cdefgab", s.reverse_left_words("abcdefg", 2)); ASSERT_EQ("umghlrlose", s.reverse_left_words("lrloseumgh", 6)); } +TEST(StringToIntTest, BasicAssertions) { + yaha::String s; + ASSERT_EQ(42, s.str_to_int("42")); + ASSERT_EQ(-42, s.str_to_int("-42")); + ASSERT_EQ(-42, s.str_to_int(" -42")); + ASSERT_EQ(4193, s.str_to_int("4193 with words")); + ASSERT_EQ(0, s.str_to_int("words and 987")); +} \ No newline at end of file