在C语言编程中,字符和整数是极为关键的类型,很多新手经常会遇见字符串和整数之间的转换问题,这种操作一般会出现在读取用户输入、处理文件内容,或者网络通信等,可以说很广泛,所以下面将分步骤介绍如何实现,希望对小伙伴们有所帮助。
1、字符串转整数的思路
字符串转整数的剧本思路是:遍历字符串中的每个字符,将其对应的数字值累加起来,需要注意的是,需要考虑字符串的正负号、空格及非数字字符。
#include
#include
#include
#include
#include
#include
#include
int my_atoi(const char *str) {
int sign = 1, base = 0;
while (isspace(*str)) str++; // 跳过空格
if (*str == '-') {
sign = -1;
str++;
} else if (*str == '+') {
str++;
}
// 检查溢出
if (!isdigit(*str)) {
if (*str == '0' && (isdigit(str[1]) || str[1] == 'x' || str[1] == 'X')) {
if (str[1] == 'x' || str[1] == 'X') {
base = 16;
str += 2;
} else {
base = 8;
str += 1;
}
} else {
return 0;
}
} else {
base = 10;
}
int value = 0;
while (isdigit(*str) || (base == 16 && isxdigit(*str))) {
if (value > INT_MAX / base) {
// 溢出处理
if (sign == 1) return INT_MAX;
else return INT_MIN;
}
int digit = (base == 10) ? (*str - '0') : (toupper(*str) < 'A' ? *str - '0' : 10 + toupper(*str) - 'A');
value = value * base + digit;
str++;
}
return value * sign;
}
int main() {
const char *str = " -42";
int num = my_atoi(str);
printf("Converted integer: %d\n", num);
return 0;
}
2、整数转字符串
整数转字符串的基本思路是:将整数不断除以10,取余数作为字符串的一位,直到整数位0,然后将得到的字符串反转,即可得到正确的整数表示。
#include
#include
#include
#include
char* my_itoa(int num, char* str, int base) {
if (base < 2 || base > 36) {
return NULL;
}
char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
bool isNegative = false;
if (num < 0 && base == 10) {
isNegative = true;
num = -num;
}
int index = 0;
do {
str[index++] = digits[num % base];
num /= base;
} while (num);
if (isNegative) {
str[index++] = '-';
}
str[index] = '\0';
// 反转字符串
for (int i = 0; i < index / 2; i++) {
char temp = str[i];
str[i] = str[index - i - 1];
str[index - i - 1] = temp;
}
return str;
}
int main() {
int num = 12345;
char str[12];
my_itoa(num, str, 10);
printf("Converted string: %s\n", str);
return 0;
}
本文凡亿教育原创文章,转载请注明来源!