不使用指针反向打印 C 字符串?
有没有一种方法可以在不使用指针的情况下反向打印固定大小的字符串?
#include<stdio.h>
main()
{
char buffer[10];
scanf("%s", buffer);
// need to print buffer in reverse without using pointers??
}
Is there a way to print a string of fixed size in reverse without using pointers?
#include<stdio.h>
main()
{
char buffer[10];
scanf("%s", buffer);
// need to print buffer in reverse without using pointers??
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
由于 C 字符串、数组和指针之间的关系,恕我直言,该练习相当简短 - C 中“字符串”最惯用的描述是由 char* 表示的,它不是数组。您的(OP)标题和帖子在字符串和字符[固定长度]之间的定义不同。
OP 应该阅读并理解此常见问题解答条目,以及在该条目和此处的帖子之间:轻松找出解决方案,并在需要时向老师/法官辩护。
我对此发表评论:永远不要使用 scanf("%s", buffer) 来填充固定长度的字符串。如果您必须使用scanf()来执行此操作,请使用字段宽度说明符:例如scanf("%9s", buffer);如果 buffer 是 [10],则您需要一个说明符 9,因为 scanf 填充缓冲区的方式:否则您必须小心龙!您还可以按字符进行 scanf 并通过循环边界来避免问题,但这可能会降低效率。
Because of the relationship between C strings, arrays, and pointers the exercise is rather shotty IMHO - the most idiomatic description of a "String" in C is represented by the char*, which is not an array. Your (the OPs) title and post differ in their definitions between string and char[fixed length].
The OP should read and understand this FAQ entry, and between that and the posts here: easily figure out a solution—as well as defend it to the teacher/judge if need be.
I'll comment on this: never use scanf("%s", buffer) to populate a fixed length string. If you must use scanf() to do it, please use a field width specifier: e.g. scanf("%9s", buffer); if buffer is an [10], you want a specifier of 9 because of how scanf fills the buffer: otherwise you must beware the dragons! You could also scanf by character and evade the issue with a loops bounds, but that would likely be less efficient.
也许有一个可爱的 K&R 函数可以在打印之前将字符串反转到位?
A lovely K&R function to reverse your string in-place before printing it, perhaps?
由于
[]
只是指针的语法糖,所以这里的版本完全不需要指针、数组或其他任何东西,只有一个int
。您没有说必须以某种方式存储该字符串。 :) (请注意,我使用fgetc
而不是缓冲区和scanf
)。Since
[]
is just syntactic sugar for pointers, here's a version that works completely without pointers, arrays or anything else, just one singleint
. You didn't say that the string has to be stored somehow. :) (Note that I usefgetc
instead of a buffer andscanf
).这是一种递归方法;从技术上讲,这是使用指针,但我不会进入语言律师模式来完成如此简单的任务。
Here's a recursive way of doing it; technically, this is using a pointer, but I wouldn't go into language-lawyer mode with such simple tasks.
将错误留给学生作为练习。
The error(s) is left as an exercise to the student.
正如 caf 所指出的,我们仍在使用指针..!
这是解决问题的另一种方法(反转字符串)。
此代码片段(可能还有大多数其他代码片段)不尊重 utf8 等内容。我认为 Signines 帖子演示的 K&R 方式与我的非常接近 (:D),所以我调整了我的以适应该示例(并纠正了一些事情..)
As caf pointed out, we're still using pointers..!
Here's an other way to solve the problem (of reversing a string).
This code snippet (and probably most others) don't respect stuff like utf8. I think signines post demonstrating the K&R way was quite close to mine (:D) so I adapted mine to fit that example (and corrected some things..)
您可以使用
strrev
来反转字符串。You can use
strrev
to reverse a string.