《C和指针》章节后编程练习解答参考——6.3

《C和指针》——6.3

题目:

  编写一个函数,把参数字符串中的字符反向排列。

函数原型:

  void reverse_string(char *string);

要求:

  使用指针而不是数组下标

  不要使用任何C函数库中用于操纵字符串的函数

  不要声明一个局部数组来临时存储参数字符串

解答代码:

#include <stdio.h>

void reverse_string(char *string)
{
    int i, n=0;

    while (*(string+n) != ‘\0‘)        //计算字符串中字符的个数
        n++;
    n--;                            //字符个数n作为索引号时要减1,即从0到n-1
    if (n > 0)                        //字符个数小于等于1时没有必要反转
    {
        for (i=0; i<=(n/2); i++)
        {
            if (i != (n-i))
            {
                char p;                //字符内容交换
                p = *(string+i);
                *(string+i) = *(string+n-i);
                *(string+n-i) = p;
            }
        }
    }
}

int main()
{
    char source[] = "ABCDEFGH";

    printf("Before reverse:\n%s\n", source);
    reverse_string(source);
    printf("After reverse:\n%s\n", source);

    getchar();
    return 0;
}

注:

  1、先计算字符串中非‘\0‘字符的个数

  2、首位字符轮流交换

时间: 2024-07-30 20:32:09

《C和指针》章节后编程练习解答参考——6.3的相关文章

《C和指针》章节后编程练习解答参考——第9章

9.1 1 #include <stdio.h> 2 #include <ctype.h> 3 #include <string.h> 4 5 #define N 100 6 7 int main (void) 8 { 9 int i = 0; 10 char strarray[N+1]; //= "Hello world! \t3I'm here!"; 11 char *input = strarray; 12 char ch; 13 unsign

《C和指针》章节后编程练习解答参考——第10章

10.1 1 #include <stdio.h> 2 3 typedef struct 4 { 5 unsigned char QuHao[5]; 6 unsigned char Exchange[10]; 7 unsigned char StnNum[10]; 8 }TelphoneNumber; 9 10 typedef struct 11 { 12 unsigned char date[10]; 13 unsigned char time[10]; 14 TelphoneNumber

上海华为的一道关于指针方面的编程题(C/C++)

int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标. 尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路 注:我的方法的复杂度为O(n),大家如果有其它方法希望可以交流一下. /* author: jiangxin Blog: http://blog.csdn.net/jiangxinnju */ #include <ios

Java指针详解___案例解答

大家先看看下面的这个程序:--------->相信初级程序员就能看得懂 int k1=1; int k2=k1; k2+=8; System.out.println("k1:"+k1); 大声回答,k1等于几? 输出: k1:1 这是为什么呢?不是明明k2已经指向了k1,然后k2的值发生改变,k1就要发生改变吗? 刚开始:k1 ,k2指向同一个内存地址: 当发生语句:k2+=8的时候,我们这么看:k2=k2+8,第一步:k2+8,很简单啊,等于9呗,这时候,内存空间会自动分配一个

C/C++的指针以及对编程的学习感悟

博主是个22岁刚毕业的应届生,还好在学校所幸自己努力,通过自学弥补了小部分不是计算机专业出生的缺陷.曾别人帮助我,我觉得应该写博客,乐于分享. 博主去年11月开始实习,因为自学,基础差的要命,有多差?我只能告诉你,连C++语法都没过关.类模版是什么都不知道,以至于别人问我“你知道类模版吗?(说说你对类模版的理解)”.哦,类模版啊,Template嘛,面试官开始微笑,我现在想想,估计那面试官只差没当场笑倒在地上了.所幸的是,后来有个经理看着我很努力,很好学,学习态度好.肯收留我,拿到的薪水也是一个

libevent编程疑难解答

转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39547391 前段时间阅读了libevent的源码.读完后,之前在使用libevent时的一些疑问都已经豁然开朗了.对于libevent源码的分析,可以到http://blog.csdn.net/luotuo44/article/category/2435521查看. 本文通过自问自答的形式,希望能帮助其他人解答在使用libevent时的一些疑惑. 一个文件描述符可以关联多个event

关于进程的章节 核心编程

1 GetModuleFileName();//获取模块的文件路径,首参数为NULL时,获取的是当前进程的文件所在的路径 2 GetModuleHandle();//获取模块的句柄,参数为NULL时,获取当前进程的文件的句柄  1 SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("Environment")); 1 //判断一个环境变量是否存在,使用如下函数: 2 DWORD WINAPI GetEnvironmen

第三节 了解指针链表后的尝试 150206118

在了解了学生信息管理的基础上,我大概知道哪里可以下手修改.并且付诸了实践. 实践证明我改成了饭店管理系统是可行的,不过其中涉及的一个算法稍作了调整. 其次,为了使程序更丰富.我想为该程序添加点东西. 因为系统整体是完整的,不可能做大幅度的修改,于是我想到了稍微的调整,比如某个地方的算法.又或者增加一个新的函数. 经过查找,我觉得可以加入一个用户密码的函数.在进行网页搜索之后发觉有部分函数过于复杂,偶然的情况下我发现讲义里面有,而且简单.于是我现学现用,决定放入程序中. 然而刚开始,直接复制粘贴是

C和指针第一章编程练习

2.编写一个程序,从标准输入读取几行输入,每行输入都要打印到标准输出上,前面要加上行号.在编写程序时要试图让程序能够处理的输入行的长度没有限制. int main() {     int ch=0;     int i = 1;//行号     int flag = 1;     while ((ch = getchar()) != EOF)//EOF是标准输入的结尾     {         if (flag == 1)//注意比较是==        {          printf("