c - 如何从十进制数中一次解析一位数字?

标签 c parsing ascii

如何将包含两位数字的字母转换为十进制,然后一次只解析 1 位数字?例如...

char letter = 'D';
char firstDigit, secondDigit;

'D' 的十进制数是 68,现在我想用这个方法将十进制数除以我的两个变量。

firstDigit = 6

secondDigit = 8

我怎样才能实现这个目标?谢谢!

最佳答案

让我们将编码数字的 ASCII 字符串称为压缩字符串。我们定义一个函数 packed_get 读取这样一个打包字符串包含的第 k 位数字:

/* packed_get(S, K)
    Return the K-th digit of S. */
char
packed_get(char *s, int k)
{
  int a = -1;
  if(k % 2)
  {
    a = s[k/2] % 10;
  }
  else
  {
    a = s[k/2] / 10;
  }
  return '0' + a;
}

return 语句采用 ASCII 编码,并将数字作为表示数字的字符而不是数字本身返回。如果将数字作为数字返回更合适,您可以轻松更改此设置。我们需要迭代压缩字符串的第二个函数是计算长度的函数,即我们可以从这样的字符串中读取的位数:

/* packed_length(S)
    Return the length of S. */
int
packed_length(char *s)
{
  return 2*strlen(s);
}

下面的程序说明了这两个函数的用法。它将 DEMONSTRATION 解压为 68697779788384826584737978

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* packed_length(S)
    Return the length of S. */
int
packed_length(char *s)
{
  return 2*strlen(s);
}

/* packed_get(S, K)
    Return the K-th digit of S. */
char
packed_get(char *s, int k)
{
  int a = -1;
  if(k % 2)
  {
    a = s[k/2] % 10;
  }
  else
  {
    a = s[k/2] / 10;
  }
  return '0' + a;
}

int
main()
{
  char* demo = "DEMONSTRATION";
  for(int i = 0; i < packed_length(demo); ++i)
  {
    putchar(packed_get(demo, i));
  }
  return EXIT_SUCCESS;
}

关于c - 如何从十进制数中一次解析一位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23034601/

相关文章:

c - 从 (search.h) 哈希搜索表中获取所有键

python ,NLTK : NameError: name 'load_parser' is not defined

c++ - 如何在 C++ 中删除换行符

c - GTK+ 2 C - 按下输入或单击按钮以从条目小部件获取文本

从 C API 在 Lua 中创建简单列表

XML 解析性能 DOM 与 XOM

c - 我如何从读取中获取ascii字符?

C ascii 字符表

C :How to compare two strings and find a word i need?

python - 使用 BeautifulSoup Issue 提取子标签文本