有没有C语言高手经过,帮我解释下面的代码

2025-03-05 02:13:23
推荐回答(3个)
回答1:


#include
#include

void
reverse_words(char * words)
{
char * h, * t; /* 头尾指针,用来标志一个单词 */

if ( *words != '\n' ) { /* '\n' 标志字符串结束 */
for(h = words; *words != ' ' && *words != '\n'; words++) ; /* 遍历字符串,发现空格或者换行,表明一个单词结束或者整个字符串结束 */
for(t = words-1; t >= h; t-- ) /* 反向打印出一个单词 */
putchar( *t );
putchar(' '); /* 再打一个空格做间隔 */
if ( *words != '\n' ) /* 如果字符串没结束,继续处理剩下的部分,还是一个字符串 */
reverse_words(words+1);
}
}

int
main(void)
{
char * words;
words = (char *) malloc(1024*sizeof(*words)); /* 分配一个空间用来存储输入的字符串 */

printf( "Please input String:\n" );
fgets(words, 1024, stdin); /* 读取字符串 */
reverse_words(words); /* 做单词翻转 */
putchar('\n');

return 0;
}

楼主,我的程序是用递归写的,你也要学会运用递归的思想思考问题。字符串的结构本身就是递归的(你去了一个字符,一个单词甚至一个字符串走,剩下的部分还是一个字符串或者结束),所以我们在处理字符串的时候要习惯递归思想。递归是非常有用的一种思考方式,你应该慢慢习惯学习并且运用它来解决诸如此类的问题。你如果看不懂的话,尽管发消息问我。

回答2:

你的链表是从小到大排列的,插入后的顺序也是从小到大

如果链表为空链表(只有头结点),则直接插入在头结点后面

else

在链表中找到第一个比q大的

通过一个中介进行插入,把q插到w前面。

for循环体只有;就是表示什么也不干,只进行判断,看看找到没有,如果没有找到,就插最后一个

大致就是这样(个人觉得判断最好加上点判断是否为空比较好,不然感觉有点怪怪的)

回答3:

这就是一个链表
第一个for确定w的值,使得它是第一个id大于插入q的id的指针
第二个for确定w前面p的指针
然后插入q到p,w之间