📜  资质 |门 CS 1998 |问题2(1)

📅  最后修改于: 2023-12-03 15:12:14.034000             🧑  作者: Mango

资质 | 门 CS 1998 | 问题2

介绍

这是一道来自于 1998 年的考试题目,考查了关于指针的运用。题目要求我们实现一个函数 reverse 将一个字符串反转。对于程序员而言,能够灵活运用指针是必备技能之一,因为指针是 C 语言中非常重要的一个概念,它可以让我们操作内存里的数据,使程序更加高效。所以掌握指针是学好 C 语言的重要一步。

题目描述

请你编写一个函数 void reverse(char *str),函数原型已经给定。函数参数是一个字符串,要求函数将该字符串反转后输出,比如将“hello world”反转为”dlrow olleh”。

void reverse(char *str)
实现思路

反转字符串的基本思路是利用指针。将字符串头尾对称位置上的字符交换,从而实现反转。具体来说,就是定义两个指针,一个指向字符串头,一个指向字符串尾,然后不断将两个指针指向的字符交换,直到两个指针相遇。这里需要注意,一定要判断字符串是偶数还是奇数,以确定两个指针最终的位置。下面是具体实现的代码:

void reverse(char *str)
{
    char *p = str, *q = str + strlen(str) - 1;  // 定义两个指针,一个指向字符串头,一个指向字符串尾
    while (p < q) {  // 如果两个指针还没相遇
        char tmp = *p;  // 交换位置上的字符
        *p++ = *q;
        *q-- = tmp;
    }
}
测试样例
#include <stdio.h>

int main()
{
    char str[] = "hello world";
    printf("原字符串:%s\n", str);
    reverse(str);
    printf("反转后字符串:%s\n", str);
    return 0;
}
测试结果

输出结果如下:

原字符串:hello world
反转后字符串:dlrow olleh
总结

这道题考察了指针的基本应用,对于初学者而言是一道不错的练手题目,然而在实际开发中,我们很少会用到这种原始的字符操作。因为字符串在 C 语言中有专门的库函数来处理,比如 strlenstrcpystrcatstrcmp 等,它们可以让我们轻松处理字符串,节省大量工作。所以,学习完指针后,建议大家再学习一下 C 语言的字符串处理函数。