Library Functions Implementation
阿新 • • 發佈:2020-08-16
void* memcpy(const void* src, void* des, unsigned int cnt) { if (!src || !des) return nullptr; if (des > src && (const char*)src + cnt < (char*)des) { const char* srcB = (const char*)src + cnt - 1; char* desB = (char*)des + cnt - 1; while (cnt--) { *desB = *srcB; --desB; --srcB; } } else { const char* srcF = (const char*)src + cnt - 1; char* desF = (char*)des + cnt - 1; while (cnt--) { *desF = *srcF; ++desF; ++srcF; } } return des; }
// 將original中的子串substr替換為replace char* strReplace(const char* original, const char* substr, const char* replace) { if (!original || !substr || !replace) { return NULL; } int len = strlen(original); char* newStr = malloc((len + 1) * sizeof(char)); memcpy(newStr, original, (len + 1) * sizeof(char)); char* p = strstr(newStr, substr); memcpy(p, replace, strlen(replace)); return newStr; }
template<typename T> class myvector { public: void push_back(T& x) { if (size == capacity) { broad(2 * capacity + 1); } obj[size++] = x; } private: void broad(int newCap) { if (newCap < size) return; T* tmp = obj; obj = new T[newCap]; for (int i = 0; i < size; ++i) { obj[i] = tmp[i]; } delete[] tmp; } int size; int capacity; T* obj; };
int myAtoi(const char* str) {
if (!str) {
throw "Invalid input!";
}
while (*str == ' ') {
++str;
}
int sign = 1;
if (*str == '+' || *str == '-') {
if (*str == '-') {
sign = -1;
}
++str;
}
else if (*str < '0' || *str > '9') {
throw "Invalid input!";
}
int value = 0;
while (*str != '\0' && *str >= '0' && *str <= '9') {
value = value * 10 + *str - '0';
++str;
}
return sign * value;
}
// O(mn),可以用KMP優化為O(m+n)
class Solution {
public:
int strStr(string haystack, string needle) {
if (needle.empty()) {
return 0;
}
int i = 0, j = 0;
while (i < haystack.size() && j < needle.size()) {
if (haystack[i] == needle[j]) {
++i;
++j;
} else {
i = i - j + 1;
j = 0;
}
if (j == needle.size()) {
return i - needle.size();
}
}
return -1;
}
};