C语言编程(练习1:函数 )

来源:互联网 发布:por una cabeza 知乎 编辑:程序博客网 时间:2024/04/30 08:12

题目: 定义一个函数,用于将一个字符串反序存放。例如,原串为 ABCDEF,则处理后的字符串为:FEDCBA

知识点:

  1. 字符串的定义问题
    char *s;
    上面只是定义一个字符串指针,并未为该指针分配存储空间。
    char s[100];      //定义一个存储字符串的数组,记得字符串与字符数组的区别。分配空间后,数组名s为字符串地址,s为指向数组的地址常量,不能做变量运算

  2. 字符串的读取问题
    区分scanf函数和gets函数读取字符串的区别:如何决定字符串何时结束;
    scanf()更基于获取单词,gets()更基于获取字符串;
    scanf函数以遇到的第一个非空白字符开始,使用%s格式,字符串读到(但不包括)下一个空白字符(比如空格、制表符或换行符);如果指定宽度,如使用%10s,会读到10个字符或直到遇到第一空白字符,由二者中最先满足的那个终止输入。           
代码实现:

/**<  定义一个函数,用于将一个字符串反序存放。例如,原串为 ABCDEF,则处理后的字符串为:FEDCBA */#include <stdio.h>#include <stdlib.h>#include <string.h>     //包含字符串相关函数的头文件#define MAX_SIZE 100     //宏定义一个最大尺寸,数组的大小void inverted(char *s);     //调用函数说明int main(){    char s[MAX_SIZE];   //定义一个字符数组    printf("输入字符串:\n");    //注意scanf 和 gets的区别    //scanf("%s",s);    gets(s);    inverted(s);    //调用函数    printf("%s", s);    //输出字符串用%s格式符    return 0;}void inverted(char *s)  //函数形参为指针传递{    int size = 0;    int num = 0;    int i;    char plate;    size = strlen(s);  //strlen函数是字符串中的字符个数,不包括字符串后面的\0结束符    num = size/2;    for(i=0; i<num; i++)    {        int inver = size-i-1;        plate = s[i];        s[i] = s[inver];        s[inver] = plate;    }}

运行结果:

如果使用scanf()函数,会忽略开始输入时候的空白字符,并读取到下一个空白字符停止,如下:

正确的应该是使用gets()函数,如下:




0 0
原创粉丝点击