前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C:每日一题:逆序字符串(牛客)

C:每日一题:逆序字符串(牛客)

作者头像
LonlyMay
发布2024-10-21 21:25:01
1060
发布2024-10-21 21:25:01
举报
文章被收录于专栏:一位计算机小白的学习日记

一、题目来源

字符逆序__牛客网 (nowcoder.com)

二、题目介绍

将一个字符串str的内容颠倒过来,并输出。

三、思路分析

  1. 要将字符串str存储起来,可以使用字符数组或者字符指针的方式存储起来;
  2. 从题目中我们知道该题需要我们自己输入字符串,并且字符串中间还要有空格,所以,我们不能使用scanf输入字符串,需要使用fgets函数来实现字符串的输入;
  3. 需要获得字符串的长度,在C语言中,可以使用strlen函数,不过使用记得包含头文件<string.h>
  4. 创建一个函数con来实现字符串逆序的操作;
  5. 实现逆序的操作:使用循环或者使用指针。

四:知识介绍

1. 字符串存储方式

1 使用字符数组:

代码语言:javascript
复制
char str[8000];//[字符个数]

2 使用字符指针:

代码语言:javascript
复制
char* str;
int size = 0; //size指输入字符的最大数

2、strlen

strlen是用来计算字符串长度的,返回值是size_t

3. 字符串的输入

1 使用scanf输入:

代码语言:javascript
复制
char str[8000];//[字符个数]
scanf("%s\n",str)//这里不用&是因为数组名是首元素地址

2 使用fgets函数输入:

fgets函数用于从指定的文件流中读取一行字符串。

函数原型:char *fgets(char *str, int n, FILE *stream);

参数介绍

  • str:指向要存储读取字符串的字符数组。
  • n:指定读取的最大字符数(包括字符串结束符 '\0' )。
  • stream:指定要读取的文件流,通常使用 stdin 表示标准输入(即键盘输入)。

注意事项

  • 由于 fgets会保留换行符,如果后续处理不需要换行符,可以手动去除。
  • 要确保提供的字符数组 str 有足够的空间来存储读取的字符串,以避免缓冲区溢出。

代码演示:

代码语言:javascript
复制
fgets(str, n, stdin);
    size_t len = strlen(str);
    //检查字符串末尾的字符(即下标为 len - 1 的字符)是否为换行符。
    //如果是的话,就将它替换为\0
    if (str[len - 1] == '\n') 
    {
        str[len - 1] = '\0';
    }

五、逐步实现

1.字符串在内存的存储与输入:

字符数组:

代码语言:javascript
复制
  char str[8000];
	fgets(str, 8000, stdin);
   size_t len = strlen(str);
   if (str[len - 1] == '\n') 
   {
       str[len - 1] = '\0';
   }

注意:这里8000是为了能够确保提供的字符数组 str 有足够的空间来存储读取的字符串

关于字符指针这个方法后面再说,今天这道题存储和输入就使用字符数组吧!

2.获取字符串长度

代码语言:javascript
复制
size_t len = strlen(str)

3.调用函数con

代码语言:javascript
复制
cont(str,len);

两个参数:str数组名,len字符串长度

void cont(char* str, size_t len) //指针接收

4.字符串逆序实现

1.使用for循环

代码语言:javascript
复制
for (int i = len - 1; i >= 0; i--)//从后向前打印每一个字符串
{
	printf("%c", str[i]);
}

2.使用while实现

代码语言:javascript
复制
    char* begin = str;
    char* end = str + strlen(str) - 1; 
    while (begin < end)
    {
       char temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }

六、函数实现

1. main函数

代码语言:javascript
复制
int main() 
{
    char str[8000];
    fgets(str, 8000, stdin);
     size_t len = strlen(str);
    if (str[len - 1] == '\n') 
    {
       str[len - 1] = '\0';
    }
    cont(str,len);	
    printf("%s\n", str);
    return 0;
}

2. con函数

法1:

代码语言:javascript
复制
void cont(char* str,size_t len)
{
	//size_t len = strlen(str);
	for (int i = len - 1; i >= 0; i--)
	{
		printf("%c", str[i]);
	}
}

法2:

代码语言:javascript
复制
void cont(char* str, size_t len)
{
    char* begin = str;
    char* end = str + strlen(str) - 1;

    while (begin < end)
    {
        char temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }
}

七、完整代码

第一种:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
void cont(char* str,size_t len)
{
	//size_t len = strlen(str);
	for (int i = len - 1; i >= 0; i--)
	{
		printf("%c", str[i]);
	}
}
int main()
{
    char str[8000];
	fgets(str, 8000, stdin);
	    size_t len = strlen(str);
	    if (str[len - 1] == '\n') 
	    {
	        str[len - 1] = '\0';
	    }
	cont(str,len);	
	
	return 0;
}

第二种:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
void cont(char* str, size_t len)
{
    char* begin = str;
    char* end = str + strlen(str) - 1;

    while (begin < end)
    {
        char temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }
}
int main() 
{
    char str[8000];
    fgets(str, 8000, stdin);
     size_t len = strlen(str);
    if (str[len - 1] == '\n') 
    {
       str[len - 1] = '\0';
    }
    cont(str,len);	
    printf("%s\n", str);
    return 0;
}

结果展示:

八、一些闲话

标题名称虽然是每日一题,但是有时候小编虽然题目写了,但是没有整理,就来不及发文章了,所以没法做到每日一篇,还请见谅!下期再见!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目来源
  • 二、题目介绍
  • 三、思路分析
  • 四:知识介绍
  • 五、逐步实现
  • 六、函数实现
  • 七、完整代码
  • 八、一些闲话
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档