char*fgets(char*str,int num,FILE*stream);
数组名 数组元素个数
str代表要保存到的内存空间的首地址,可以是字符数组名,也可以是指向字符数组的字符指针变量名。num 代表的是读取字符串的长度。stream 表示从何种流中读取,可以是标准输入流 stdin,也可以是文件流
fgets()函数的第2个参数指明了读入字符的最大数量。如果该参数的值是n,那么fgets()将读入n-1个字符,或者读到遇到的第一个换行符为止;
使用scanf 读取字符串 i love peng ge.
读取到的结果只有i,原因是scanf函数读取到空格的时候便结束了读取,那有什么方法用scanf来读取有空格的字符串呢?
读到'\n'结束读取,并将其读到的数据抛弃,然后再抛弃一个字符(这个字符是'\n')
此时缓存中不存在任何字符
scanf("%*[^\n]%*c");
#include
int main()
{
char c;
//直到遇到字符a停止读取,
//舍弃a
//读取将a后的一个字符存入变量c
scanf("%*[^a]%*c%c",&c);
printf("%c\n",c);
return 0;
}
将一句话的单词进行倒置,标点不倒置。比如 "I like beijing.",经过处理后变为:"beijing. like I"。
字符串长度不超过100。
输入描述:
输入一个仅包含小写字母、空格、'.' 的字符串,长度不超过100。
'.' 只出现在最后一个单词的末尾。
输出描述:
依次输出倒置之后的字符串,以空格分割
I like beijing.
beijing. like I
将输入的整个句子进行逆序,将输入的 I like beijing. 逆序为 .gnijieb ekil i,在使用指针相关知识,将每个单词进行逆序,最终输出beijing. like i
1.
数组名在一般情况下就代表这数组首元素的地址。
指向字符串末尾的指针 :
运用strlen函数,计算出字符串长度,再与字符串首地址进行相加,最后减1得到了字符串末尾的地址
int len=strlen(arr)
right=arr+len-1;//得到了字符串末尾的指针
如图,左边的指针所指向的内容与右边的指针所指向的内容交换,交换一次后left++,right--
外层使用while循环,当left<+right时停止交换
void reserve(char* left, char* right)
{
while(left < right)
{
char tmp;
tmp = *left;
*left = *right;
*right = tmp;
right--;
left++;
}
}
char* start = arr;
char* cur = arr;
while (*cur!='\0')
{
while (*cur != ' '&&*cur!='\0')
{
cur++;
}
reserve(start, cur - 1);
start = cur + 1;
if(*cur==' ')
cur++;
}
下面是整体代码
#include
#include
void reserve(char* left, char* right)
{
while(left < right)
{
char tmp;
tmp = *left;
*left = *right;
*right = tmp;
right--;
left++;
}
}
int main()
{
char arr[101] = {0};
fgets(arr, 101, stdin);
int len = strlen(arr);
char*left = arr;
char* right = arr + len - 1;
reserve(left, right);//将整个句子逆序
char* start = arr;
char* cur = arr;
while (*cur!='\0')
{
while (*cur != ' '&&*cur!='\0')
{
cur++;
}
reserve(start, cur - 1);
start = cur + 1;
if(*cur==' ')
cur++;
}
printf("%s", arr);
return 0;
}
运行结果如下图:
创作不易,留下你的赞吧