当前位置: 首页 > news >正文

Linux基础33-C语言篇之字符串的基础操作【入门级】

字符串的基础操作

在用格式化说明符%s进行输入输出时,其输入输出项均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统将自动在字符串最后加上\0。在输出时,遇到结束符\0作为输出结束标志。

对于字符串操作,我们需要使用到一些系统提供的函数(API操作)

字符串输入
scanf

语法:

scanf("%s",数组名);

注意:数组名对应的数组只能是char类型

案例:

#include <stdio.h>
int main()
{
      // 创建一个数组,用来存放人的名字
    char name[20];
    printf("请输入您的名字:\n");
    scanf("%s",name);// scanf第二个参数需要传递变量地址,如果是数组,数组名就代表数组的首地址,因为数组本身是没有空间的,其空间就是元素空间
    printf("您的姓名是%s\n",name);
    return 0;
}

注意:采用scanf()进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格就会结束。

fgets

语法:

fgets(数组名,数组容量,stdin);

功能:

​ 从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)

说明:

​ 采用fgets进行字符串输入,可获取所有输入的字符串,包含\n,在实际的字符串处理时,我们可能需要处理\n

案例:

 #include <stdio.h>
 int main(int argc,char *argv[])
 {
    // 创建一个数组,用来存放人的名字
    char name[20];
    printf("请输入您的名字:\n");
    // fgets和scanf只能二选一
    fgets(name,sizeof(name)/sizeof(name[0]),stdin);
    printf("您的姓名是%s\n",name);
    return 0;
 }

注意:

​ ①如果输入的字符不包括空格或换行,可以使用scanf或fgets

​ ②如果输入的字符串需要包含空格或换行,智能使用fgets

​ ③经过对比,我们发现,在字符串输入中,fgets和scanf相比,fgets友好一些

gets(危险,谨慎使用)

语法:

gets(数组名);

功能:

​ 从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)

说明:

​ 采用gets进行字符串输入,可获取所有输入的字符串,包含\n,在实际的字符串处理时,我们可能需要处理\n

案例:

 #include <stdio.h>
int main(int argc,char *argv[])
 {
    // 创建一个数组,用来存放人的名字
    char name[20];
    printf("请输入您的名字:\n");
    // fgets和scanf只能二选一
    fgets(name,sizeof(name)/sizeof(name[0]),stdin);
    printf("您的姓名是%s\n",name);
    return 0;
 }
字符串输出
printf

语法:

printf("%s",数组名);

案例:

 #include <stdio.h>
 int main(int argc,char *argv[])
 {
    // 创建一个数组,用来存放人的名字
    char name[20];
    printf("请输入您的名字:\n");
    scanf("%s",name);// scanf第二个参数需要传递变量地址,如果是数组,数组名就代表数组的首地址,因为数组本身是没有空间的,其空间就是元素空间
    printf("您的姓名是%s\n",name);
    return 0;
 }
fputs

语法:

fputs(const char *s,FILE *stream);

功能:

​ 输出一个字符串

说明:

​ 字符串可以包含转义字符

案例:

#include <stdio.h>
int main(int argc,char *argv[])
{
    // 创建一个数组,用来存放人的名字
    char name[20];
    printf("请输入您的名字:\n");
    // gets、fgets和scanf只能多选一
    gets(name);
     // 输出
	fputs(name,stdout);// 标准的输出
	return 0;
}
puts

语法:

puts(const char *s);

功能:

​ 输出一个字符串

说明:

​ 字符串可以包含转义字符

案例:

#include <stdio.h>
int main(int argc,char *argv[])
{
    // 创建一个数组,用来存放人的名字
    char name[20];
    printf("请输入您的名字:\n");
    // gets、fgets和scanf只能多选一
    gets(name);

// 输出
puts(name);// 标准的输出
return 0;
}
字符串转数值
  • strtol

     long strtol(const char *str, char **endptr, int base);
    

    将字符串转换为长整型数。

    参数说明:

    • str :指向要转换的字符串的指针。
    • endptr :一个指向字符指针的指针。如果提供了这个参数,并且转换成功, 设置为指向第一个未转换字符的指针。如果 *endptr 将被 endptrNULL ,则不使用它。
    • base :用于指定转换的基数。它可以是 2 到 36 之间的值,或者是特殊值 0。如果 base 是 0,则函数会根据字符串的前缀(如 “0x” 或 “0X” 表示十六进制,“0” 表示八进制,否则默 认为十进制)来自动确定基数。
  • strtoul

     unsigned long strtoul(const char *str, char **endptr, int base);
    

    将字符串转换为无符号长整型数

  • strtod

     double strtod(const char *str, char **endptr);
    
  • atoi

     int atoi(const char *str);
    
  • atol

     long atol(const char *str);
    

    将字符串转换为长整型数(不推荐使用,建议使用 strtol )。

  • atof

     double atof(const char *str);
    

    将字符串转换为双精度浮点数(不推荐使用,建议使用 strtod )。

案例:

#include <stdio.h>
#include <stdlib.h>
int a = 10;
}
int main(int argc,char *argv[])
{
    printf("%lo,%ld,%lx\n",strtol("12",NULL,8),strtol("12",NULL,10),strtol("12",NULL,16));
    printf("%lo,%ld,%lx\n",strtol("012",NULL,0),strtol("12",NULL,10),strtol("0x12",NULL,0));
    int a = 10;
    printf("%p,%lx\n",&a,&a);
    return 0;
}

相关文章:

  • 浅入浅出Selenium DevTools
  • 【数据结构】_顺序表
  • SringAop
  • 互联网医院实时数据监测智能分析系统设计概述(上)
  • 基于springboot后台管理的校园网站系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【HarmonyOS NEXT】控制 WebP 格式动图播放次数的实现方案
  • 【Prometheus】prometheus服务发现与relabel原理解析与应用实战
  • 如何用 Python 进行机器学习
  • python学习七
  • linux上搭建Lago并部署
  • word转换为pdf后图片失真解决办法、高质量PDF转换方法
  • C语言32个关键字
  • 面试【进阶】 —— 说下csr、ssr、ssg 的区别?
  • 【MySQL 的数据目录】
  • Spring Cloud Alibaba与Spring Boot、Spring Cloud版本对应关系
  • 【AIDevops】Deepseek驱动无界面自动化运维与分布式脚本系统,初探运维革命之路
  • 进程通信——信号
  • ESP 32控制无刷电机2
  • 【前端进阶】10 掌握前端框架模板引擎的实现原理
  • SpringBoot返回文件让前端下载的几种方式
  • 做ppt设计师哪个网站好/2021年年度关键词
  • ftp网站服务器/网络营销案例视频
  • 如何打开建设网站后台/如何网络媒体推广
  • skype在网站上怎么做链接/域名查询大全
  • 科普类网站怎么做/如何用模板做网站
  • 如何快速用手机做网站/株洲最新今日头条