整数转字符串和字符串转整数
整数转字符串
在 C++ 中,将整数转换为字符串可以使用 std::to_string
函数。另一种方法是使用字符串流(std::ostringstream
)。
示例:
#include <iostream>
#include <string>
#include <sstream>
int main() {
int num = 123;
// 使用std::to_string
std::string str1 = std::to_string(num);
std::cout << "Using std::to_string: " << str1 << '\n';
// 使用ostringstream
std::ostringstream oss;
oss << num;
std::string str2 = oss.str();
std::cout << "Using std::ostringstream: " << str2 << '\n';
return 0;
}
字符串转整数
将字符串转换为整数可以使用 std::stoi
或 std::stringstream
。
示例:
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string str = "456";
// 使用std::stoi
int num1 = std::stoi(str);
std::cout << "Using std::stoi: " << num1 << '\n';
// 使用istringstream
std::istringstream iss(str);
int num2;
iss >> num2;
std::cout << "Using std::istringstream: " << num2 << '\n';
return 0;
}
strcat
, strcpy
, strncpy
, memset
, memcpy
的内部实现
这些函数通常是用 C 实现的低级库函数,但在 C++ 中也可以使用。我们将以 C 的风格来实现这些函数,并提供示例代码。
strcat
- 字符串拼接
拼接两个 C 风格字符串。
#include <iostream>
#include <cstring>
// 自定义strcat函数
char* my_strcat(char* destination, const char* source) {
char* ptr = destination + strlen(destination);
while (*source != '\0') {
*ptr++ = *source++;
}
*ptr = '\0';
return destination;
}
int main() {
char str1[20] = "Hello, ";
char str2[] = "World!";
my_strcat(str1, str2);
std::cout << str1 << '\n'; // Output: Hello, World!
return 0;
}
strcpy
- 字符串复制
复制一个 C 风格字符串到另一个字符串。
#include <iostream>
#include <cstring>
// 自定义strcpy函数
char* my_strcpy(char* destination, const char* source) {
char* ptr = destination;
while ((*ptr++ = *source++) != '\0') {
// Do nothing
}
return destination;
}
int main() {
char str1[20];
char str2[] = "Hello, World!";
my_strcpy(str1, str2);
std::cout << str1 << '\n'; // Output: Hello, World!
return 0;
}
strncpy
- 限定长度的字符串复制
复制一个 C 风格字符串到另一个字符串,但不超过指定的长度。
#include <iostream>
#include <cstring>
// 自定义strncpy函数
char* my_strncpy(char* destination, const char* source, size_t num) {
char* ptr = destination;
while (num-- && (*ptr++ = *source++) != '\0') {
// Do nothing
}
while (num--) {
*ptr++ = '\0';
}
return destination;
}
int main() {
char str1[20];
char str2[] = "Hello, World!";
my_strncpy(str1, str2, 5);
std::cout << str1 << '\n'; // Output: Hello
return 0;
}
memset
- 内存设置
将内存块的每个字节设置为指定的值。
#include <iostream>
#include <cstring>
// 自定义memset函数
void* my_memset(void* ptr, int value, size_t num) {
unsigned char* p = (unsigned char*)ptr;
while (num--) {
*p++ = (unsigned char)value;
}
return ptr;
}
int main() {
char str[50] = "Hello, World!";
my_memset(str, 'a', 5);
std::cout << str << '\n'; // Output: aaaaao, World!
return 0;
}
memcpy
- 内存复制
将某块内存中的内容复制到另一块内存。
#include <iostream>
#include <cstring>
// 自定义memcpy函数
void* my_memcpy(void* destination, const void* source, size_t num) {
unsigned char* dest = (unsigned char*)destination;
const unsigned char* src = (const unsigned char*)source;
while (num--) {
*dest++ = *src++;
}
return destination;
}
int main() {
char src[50] = "Hello, World!";
char dest[50];
my_memcpy(dest, src, strlen(src) + 1);
std::cout << dest << '\n'; // Output: Hello, World!
return 0;
}
这些示例展示了如何编写这些常用函数的自定义实现,并帮助理解它们的工作原理。希望这些信息对你有所帮助!