在C中将字符串转换为数字

Converting string to number in C

我正在尝试编写一个将小写字母表转换为数字的程序。 一个 -> 01 b -> 02 ... z -> 26

对于前九个字母,我需要在数字前加一个 0。

这是我的代码。

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


#define MAXLEN 128

void s2n(char str[])
{

  int i;
  char x;
  char result[256];

  for (i=0; str[i] != '[=10=]'; i++) {
    x = str[i];
    x = x - 96;


    if (x < 10) {

      char src[2] = {0, x};
      strcat(result, src);
    }
    else {
      char src2[1] = {x};
      strcat(result, src2);
    }

    printf("%s",  result);

  }

}

int main(void)
{
  char str[MAXLEN];

  printf("Lower cased string please: ", MAXLEN);
  scanf("%s", str);

  s2n(str);

  return 0;

}

你能告诉我我的代码有什么问题吗??

我看到的一个问题是:

  char src[2] = {0, x};

您想使用 字符 0,而不是字节值 0 (NUL):

  char src[2] = {'0', x};

此外,您需要 NUL 终止您的 src 数组:

  char src[] = {'0', x, 0};

在这两种情况下都需要进行 NUL 终止。

另一个问题是你的x = x - 96语句也没有考虑到字符0不同于字节值0。所以

x = x - 96 + '0';

会更好

你在一个未初始化的数组上使用 strcat()result,它不会那样工作,strcat() 在它的第一个参数中寻找终止的 nul 字节, 并从该点粘贴第二个参数。

在你的情况下没有 '[=17=]' 结果,调用 strcat() 并使用 result 作为第一个参数会导致未定义的行为。

你至少应该确保结果中有一个'[=17=]',你可以通过将result的第一个元素设置为'[=17=]'来做到这一点,比如

result[0] = '[=10=]';

在循环开始之前,你还传递了第二个参数src,它是一个数组但不是字符串,因为它没有终止符'[=17=]',但你实际上不需要数组或 strcat().

您可以使用索引变量,并将数组的第 i 个元素赋给从原始值计算出的实际字符,例如

result[i] = x;

然后你不 nul 终止 result,这会在你尝试打印 resutl.

时导致未定义的行为

您还向 printf() 传递了一个不期望的参数,这表明您正在沉默或忽略编译器警告。

你的代码有很多问题,下面的代码,做你想要的

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

void s2n(char chr)
{
    char result[4];
    if (snprintf(result, sizeof(result), "%02d", 1 + chr - 'a') >= sizeof(result))
        return;
    printf("%s",  result);
}

int main(void)
{
    char chr;

    printf("Lower cased string please: ");
    if (scanf(" %c", &chr) != 1)
    {
        fprintf(stderr, "input error!\n");
        return -1;
    }
    s2n(chr);

    return 0;
}

请注意,除了您要存储结果的字符串外,不需要任何字符串,您可以使用 sprintf().

轻松构建该字符串