我有一个3位数的整数myInt
:
int myInt = 809;
我需要一个输出字符串*myStr
,该字符串由最后两位数字组成。因此
char *mystr = "09";
最简单的解决方案是什么?
答案 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;
}