返回整数的最后两位数字作为C中的字符串

时间:2018-11-07 07:51:47

标签: c character

我有一个3位数的整数myInt

int myInt = 809;

我需要一个输出字符串*myStr,该字符串由最后两位数字组成。因此

char *mystr = "09";

最简单的解决方案是什么?

5 个答案:

答案 0 :(得分:4)

您可以这样做:

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

int main(int argc, char **argv)
{
    char buf[32];
    int myInt = 809;
    char* mystr;
    snprintf(buf, sizeof buf, "%d", myInt);
    if (strlen(buf) > 2)
        mystr = buf + strlen(buf) - 2;
    else
        mystr = buf;
    fputs(mystr, stdout);
    return 0;
}

答案 1 :(得分:3)

这是一个简单的解决方案:

#include <stdio.h>

int main(void) {
    char buf[3];
    char *myStr;
    unsigned int myInt = 809;

    buf[0] = myInt / 10 % 10 + '0';  /* tens digit */
    buf[1] = myInt % 10 + '0';       /* unit digit */
    buf[2] = '\0';                   /* null terminator */
    myStr = buf;

    puts(mystr);
    return 0;
}

答案 2 :(得分:2)

这里不需要指针魔术。只需使用普通数学(remainder operator%)以及一些合适的格式即可:

#include <stdio.h>

int main(void)
{
  char a[3]; /* 2 characters for any value >= 0 and < 100. So we rely on the 100 below.
                +1 character for the `0`-terminator to make this a C-string*/
  int i = 809;

  assert(i >= 0); 

  sprintf(a, "%02d", i % 100);

  puts(a);
}

或避免使用幻数:

#include <stdio.h>

long long power_integer(int base, int x)
{
  if (0 == x)
  {
    return 1;
  }

  return base * power_integer(x - 1);
}

#define CUTOFF_BASE (10)
#define CUTOFF_DIGITS (2)

int main(void)
{
  char a[3]; 
  char f[8]; /* To hold "%01lld" to "%019lld". 
                (A 64 bit integer in decimal uses max 19 digits) */

  int i = 809;

  assert(i >= 0); 

  sprintf(f, "%%0%dlld*, CUTOFF_DIGITS);
  sprintf(a, f, i % power_integer(CUTOFF_BASE, CUTOFF_DIGITS));

  puts(a);
}

输出为:

09

答案 3 :(得分:2)

对于将“魔术数字”转换为字符串的特定情况,您也可以在编译时执行。也就是说,当您使用整数常量而不是运行时值时:

#include <stdio.h>

#define VAL 809

#define STRINGIFY(x) #x
#define STR(i) STRINGIFY(i)
#define SUBSTR(i, n) &(STRINGIFY(i))[n]

int main (void)
{
  int whatever = VAL;

  puts(STR(VAL));
  puts(SUBSTR(VAL, 1));

  return 0;
}

输出:

809
09

答案 4 :(得分:1)

您可以尝试这样的事情:

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv){
    int myInt = 809;
    char buf[16];  // buffer big enough to hold the string representation
    sprintf(buf, "%d", myInt); // write the string to the buffer
    char* myStr = &buf[strlen(buf) - 2]; // set a pointer to the second last position
    printf("myStr is %s\n", myStr);
    return 0;
}