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

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;
}

http://www.kler.cn/a/565901.html

相关文章:

  • StableDiffusion打包 项目迁移 项目分发 1
  • vue el-table-column 单元表格的 省略号 实现
  • P1706 全排列问题
  • 使用python做http代理请求
  • docker和containerd从TLS harbor拉取镜像
  • Linux的诞生:一场自由与协作的技术革命
  • CF 106B.Choosing Laptop(Java实现)
  • Kafka零拷贝
  • spark的一些指令
  • 嵌入式八股文,select、poll、epoll
  • python学习六
  • 处理DeepSeek返回的markdown文本
  • DeepSeek开源周第四弹!DeepSeek开源三剑客:训练效率的“时空魔术师”与“资源管家”全解析
  • LeetCode 热门100题-回文链表
  • DeepSeek开源周,第四弹再次来袭,优化并行策略
  • < 自用文儿 > Gobuster 暴力扫描工具与 SecLists 安全测试词表集合
  • 【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)
  • 【大语言模型,数据向量化】向量化时使用本地HuggingFaceEmbeddings失败,调用embeddings时仍会去Huggingface下载的解决方法
  • DeepSeek后训练:监督微调和强化学习
  • Spring Data JPA 中的分页实现:从 BasePage 到 Pageable