牛客网学习之倒置字符串(详解fgets函数,如何读取含有空格的字符串)

简介: 牛客网学习之倒置字符串(详解fgets函数,如何读取含有空格的字符串)

题目要求:

过程分析:(大致思路)

具体代码:

#include <stdio.h>
#include <string.h>
/*逆序字符串*/
void reverse(char* begin,char* end)
{
  while (begin < end)
  {
    char temp = *begin;
    *begin = *end;
    *end = temp;
    begin++;
    end--;
  }
}
int main()
{
  char arr[101];
  fgets(arr, 101, stdin);
  int len = strlen(arr);
  arr[len - 1] = '\0';//注意,fgets函数在读取时会把\n也存到字符串中
            //要把最后一个字符改为\0
  /*实现倒置字符串*/
  reverse(arr, arr + len - 2);
  /*实现每个单词的逆序*/
  char* start = arr;//存储每个单词的首地址
  char* cur = arr;//用于存储当前的地址
  while (*cur)
  {
    while (*cur != ' ' && *cur!='\0')
    {
      cur++;//最后cur会指向空格(最后一个单词会指向\0)
    }
    reverse(start, cur - 1);
    start = cur + 1;
    if (*cur == ' ')//若*cur在等于\0之后再++,他会指向一个随机值,从而使循环继续
    {
      cur++;//使其指向下一个单词的首地址
    }
  }
  printf("%s", arr);
  return 0;
}

注意:本题作者在一开始使用了scanf函数来读取字符串,忘记了scanf函数读取到空格就会自动结束读取字符串了,导致接下来如何编写都无法得到正确答案,吃了基础不牢的亏,希望大家引以为鉴;

那么,在无法使用scanf函数来读取含有空格的字符串的情况下,我们又可以使用哪些方法呢?下面作者将讲述三个方法;

1.fgets函数(重点讲解)

原型:

观察fgets函数,我们可知他与scanf函数最大的不同在于fgets函数会将字符串的结束标志'\0'也作为一个元素存储到数组str中!在倒置字符串的代码中,就有对这一情况的一个解决方案。

2.使用scanf("%[^\n]s", arr)函数

       可以理解为是scanf函数的一个优化版本,使scanf能够读取含有空格的字符串。

在倒置字符串代码中使用scanf("%[^\n]s",arr);函数

 

3.gets或gets_s函数

       很多人的第一想法可能是gets函数,因为这是我们在初学C语言时经常用到的函数,可在C99标准下,这个函数因为安全问题已经被废弃,在一些较老的编译器下可能还能使用,但大多编译器已经无法使用,所以这个方法适用范围太窄,建议大家以后不要再使用此函数。

目录
相关文章
|
C语言
【Leetcode-1638.统计只差一个字符的字串数目(C语言)】
【Leetcode-1638.统计只差一个字符的字串数目(C语言)】
51 0
|
7月前
|
C语言
C语言:从键盘读入三个整数,按从大到小输出
C语言:从键盘读入三个整数,按从大到小输出
|
7月前
|
C语言
C语言学习记录——鹏哥字符分类函数、字符转换函数
C语言学习记录——鹏哥字符分类函数、字符转换函数
856 2
|
7月前
|
安全 编译器 C语言
【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数
【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数
|
8月前
|
C语言
【C语言】字符分类函数与字符转换函数
【C语言】字符分类函数与字符转换函数
72 1
|
8月前
|
存储 编译器 C语言
C语言程序设计——字符输出函数putchar()
C语言程序设计——字符输出函数putchar()
|
8月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
8月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
90 0
|
8月前
|
Java 测试技术 索引
java字符串练习题1、反向输出字符串
java字符串练习题1、反向输出字符串
73 0