字符串转换成十进制整数.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. int main() {
  4. char input[1000]; // 假设输入的字符串长度不超过1000
  5. char hex_str[1000]; // 存储提取出的十六进制字符
  6. int index = 0; // 记录当前处理的字符位置
  7. int negative = 0; // 标记是否存在负号
  8. // 读取输入直到遇到 #
  9. while (1) {
  10. char ch = getchar();
  11. if (ch == '#') {
  12. break;
  13. }
  14. input[index++] = ch;
  15. }
  16. input[index] = '\0'; // 在输入末尾加上字符串结束符
  17. // 判断是否有负号
  18. if (input[0] == '-') {
  19. negative = 1; // 存在负号
  20. index = 1; // 从下一个字符开始处理
  21. } else {
  22. index = 0; // 没有负号,从第一个字符开始处理
  23. }
  24. int hex_index = 0; // 记录当前提取的十六进制字符位置
  25. // 遍历输入字符串,提取十六进制字符
  26. while (input[index] != '\0') {
  27. char ch = toupper(input[index]); // 将字符转换为大写以便统一处理
  28. if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')) {
  29. hex_str[hex_index++] = ch; // 是十六进制字符,加入到hex_str中
  30. }
  31. index++;
  32. }
  33. hex_str[hex_index] = '\0'; // 在提取的十六进制字符末尾加上字符串结束符
  34. // 使用sscanf将十六进制字符串转换为长整型
  35. long decimal_value;
  36. sscanf(hex_str, "%lx", &decimal_value); // %lx格式将十六进制字符串转换为长整型
  37. // 如果存在负号,转换后的数值取负
  38. if (negative) {
  39. decimal_value = -decimal_value;
  40. }
  41. // 输出转换后的十进制数值
  42. printf("%ld\n", decimal_value);
  43. return 0;
  44. }