题目: 定义一个函数,用于将一个字符串反序存放。例如,原串为 ABCDEF,则处理后的字符串为:FEDCBA
知识点:
- 字符串的定义问题
上面只是定义一个字符串指针,并未为该指针分配存储空间。char *s;
char s[100]; //定义一个存储字符串的数组,记得字符串与字符数组的区别。分配空间后,数组名s为字符串地址,s为指向数组的地址常量,不能做变量运算
- 字符串的读取问题
区分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()函数,如下: