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

字符串存储、分割相关总结(strncpy 函数和strtok() 函数相关)

1.想用这些函数都需要导入头文件

#include<string.h>

2.怎么创建字符串并输入

#define maxsize 100

char a[maxsize+1];//创建字符串,预留一个位置放'\0'

【1】scanf("%s",a);//使用 scanf 函数读取不带空格的字符串

【2】fgets(a, sizeof(a), stdin);//使用 fgets 函数读取带空格的字符串

【3】gets(a);//使用 gets 函数读取带空格的字符串(尽量不要用,会发生缓冲区溢出)

【4】getchar(a);//使用 getchar 函数逐字符读取字符串(不带空格)

3.怎么输出

【1】使用%s格式控制符输出字符串:

printf("%s", str);

【2】使用puts函数输出字符串,自动换行

puts(str);

【3】使用fputs函数输出字符串,不自动换行

fputs(str, stdout);

【4】逐个字符输出字符串

int i = 0;
while (str[i] != '\0') {
    putchar(str[i]);
    i++;
}

3.strncpy 函数和strtok() 函数

【1】strncpy函数,char *strncpy(char *dest, const char *src, size_t n);

strncpy 会从 src 复制最多 n 个字符到 dest,包括空字符(\0)。如果 src 的长度小于 n,则 dest 将被填充空字符直到 n 个字符。

【2】strtok 函数,char *strtok(char *str, const char *delim);

strtok 会根据 delim 中的字符分割 str 字符串,并返回分割后的第一个(或下一个)子串。每次调用 strtok 后,它都会修改 str 字符串,因此它是不安全的,不推荐在多线程环境中使用。

【3】代码:

#include <stdio.h>
#include <string.h>

#define MAX_STRING_LENGTH 1024
#define MAX_SUBSTRINGS 100

int main() {
    char input[MAX_STRING_LENGTH];
    char token[MAX_STRING_LENGTH];
    char output[MAX_SUBSTRINGS][MAX_STRING_LENGTH] = {0};
    char *context;
    int substring_index = 0;
    char delimiter[] = "-";

    // 获取输入字符串
    printf("Enter a string separated by '-': ");
    fgets(input, MAX_STRING_LENGTH, stdin);
    input[strcspn(input, "\n")] = 0; // Remove the newline character

    // 使用 strtok 分割字符串
    char *token_ptr = strtok(input, delimiter);
    while (token_ptr != NULL) {
        strncpy(token, token_ptr, MAX_STRING_LENGTH - 1); // 复制子串
        token[MAX_STRING_LENGTH - 1] = '\0'; // 确保字符串以空字符结尾

        // 检查子串长度是否超过了数组的界限
        if (strlen(token) >= MAX_STRING_LENGTH) {
            printf("Error: Substring exceeds maximum length.\n");
            return 1;
        }

        // 将子串复制到输出数组中
        strncpy(output[substring_index], token, strlen(token) + 1); // +1 以复制 '\0'
        substring_index++;

        // 获取下一个子串
        token_ptr = strtok(NULL, delimiter);
    }

    // 输出结果
    printf("Original substrings:\n");
    for (int i = 0; i < substring_index; i++) {
        printf("%s\n", output[i]);
    }

    return 0;
}


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

相关文章:

  • Jenkins使用记录
  • Unity Dots理论学习-2.ECS有关的模块(1)
  • 使用 ASP.NET Core wwwroot 上传和存储文件
  • 详细讲一下React中的路由React Router
  • Crawler实现英语单词的翻译
  • 阿里云clb是什么
  • 钉钉h5微应用鉴权配置客户端 API 鉴权步骤
  • 智能网关在电力物联网中的应用
  • 洛谷P5266 【深基17.例6】学籍管理(c嘎嘎)
  • 每天五分钟机器学习:凸函数
  • 清空DNS 缓存
  • 5.银河麒麟V10(ARM) 离线安装redis
  • 网易企业邮箱登陆:保障数据安全
  • Linux Shell : Process Substitution
  • 【每日学点鸿蒙知识】userAgent识别问题、StatusBar颜色、taskpool中操作同一个对象、scroll组件
  • Hive练习题11-15
  • 【数据库初阶】Linux中库的基础操作
  • Spark SQL DML语句
  • 数据结构与算法Python版 图
  • 【论文阅读】Reducing Activation Recomputation in Large Transformer Models
  • 渗透测试中常见的端口
  • springboot508基于Springboot宠物商城网站系统(论文+源码)_kaic
  • 常用的前端框架有哪些
  • MySQL数据库函数——日期函数
  • Spring Boot自定义注解获取当前登录用户信息
  • ChatGPT 搜索工具被曝存在安全漏洞