2011-08-25 34 views
1

我试图访问C++中数组中的最后一个元素(更具体地说,我试图将整数转换为字符数组,然后访问最后一位数字)。下面是我想出迄今:访问数组的最后一个元素

int number_to_convert = 1234; 
char * num_string; 
sprintf(num_string, "%d", number_to_convert); 
printf("Number: %d Sizeof num_string: %d Sizeof *num_string: %d Sizeof num_string[0]: %d\n", number_to_convert, sizeof(num_string), sizeof(*num_string), sizeof(num_string[0])); 

使用这个信息,我尝试了几种不同的组合来访问的最后一个元素:

num_string[sizeof(number_to_convert)/sizeof(*number_to_convert)-1]; 
num_string[sizeof(number_to_convert)-sizeof(char)] 

也许有一个更好的方式来获得最后的数字,但这是我能找到的最佳方式。我想要最后一个字符(不是空字符)。

+0

您的意思是** num_string [的sizeof(num_string)-sizeof(焦炭)**而不是** number_to_convert [sizeof(number_to_convert)-sizeof(char)] ** – Arun

+0

在您的示例中没有为num_string分配内存,这很危险。你还应该保留sprintf的返回,因为它给你实际写入的字符总数。此外,它是预先使用snprintf而不是sprintf – Pierre

+0

该代码甚至编译?你正试图解引用一个int变量(number_to_convert)。 – guardianpt

回答

9

对于n的最后十进制数字,请尝试n % 10

要获得该数字的文本数字字符,请使用'0' + (n % 10)

对于任何其他数字库,请将10替换为该基数。


的 “因为我可以” 的方式:

std::ostringstream s; 
s << n; 
char last_digit = *s.str().rbegin(); 

甚至:

const char last_digit = *static_cast<std::ostringstream&>(std::ostringstream() << n).str().rbegin(); 
+0

这很有用,谢谢,但我也很好奇如何按照我展示的方式进行操作,即使它更复杂。我现在正在学习数组/指针,将一个数字转换为一个c-string,然后取出最后一个元素似乎是一个很好的方法。 – syl

+0

不,这不是C++。如果有什么可以使用字符串流和格式化输出。请注意,您使用了'sprintf'错误 - 如果您不熟悉手动内存管理,最好不要清除那些致命的C函数。 –

相关问题