C语言指针应用案例之--字符串大小写转换

301 阅读2分钟

C指针的应用

关于C指针学了好几次,每次都感觉学会了,其实还是没有.最近在学习grbl,发现了如下这个函数,再继续好好学一下这个C指针.


/*
 * 功能:
 * 1,把字符串转换为大写;
 * 2,去除掉字符串中的空格;
 */
char *strcaps (char *s)
{
    char c, *s1 = s, *s2 = s;

    do {
        c = *s1++;
        if(c != ' ')
            *s2++ = CAPS(c);
    } while(c);

    *s2 = '\0';

    return s;
}

分析:

  • 1,char *strcaps (char *s){}//这是一个指针函数(返回一个char类型的指针),其中定义了一个char类型的指针参数;
  • 2,char c,*s1 =s,*s2=s//定义了指针变量s1,s2并把参数的值(地址)赋给它们;
  • 3,c = *s1++//为指针s1指向的char赋给c,这里自加的是指针,不是指针指向的值,如果要自加指针指向的值需要小括号括起来(*s1)++;
  • 4,while(c)//为判断字符串结束,每个字符串后都会有'/0'(自动添加的);
  • return s//指针没变,变的是指针指向的值;

虽然字符串大小写转换和去除空格的方法有很多种,但这个使用指针来完成还是很值得学习的.知识只有通过反复的练习才能掌握,为此我专门写了一个简单的测试程序,测试了一下;

/*
 ============================================================================
 Name        : C_Learn_point.c
 Author      : wobotyuan
 Version     :
 Copyright   : robomach
 Description : 学习指针的应用
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#define CAPS(c) ((c >= 'a' && c <= 'z') ? (c & 0x5F) : c)
char *strcaps (char *s);

int main(void) {
//	puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
	char str[]=("!!!Hello World ni hao!!!");
	char *p_str=str;
	puts(strcaps(p_str));
	return EXIT_SUCCESS;
}

/*
 * 功能:
 * 1,转换字符串到大写;
 * 2,除去字符串中的空格;
 */

char *strcaps (char *s)
{
    char c, *s1 = s, *s2 = s;

    do {
        c = *s1++;		//s1指向的数,然后指针自加1,这里注意指针就是地址,指针没有变
        if(c != ' ')
            *s2++ = CAPS(c);
    } while(c);

    *s2 = '\0';

    return s;
}

输出结果:

image.png