liruby 2018-12-19 08:01 采纳率: 50%
浏览 1440

如何将字符串中所有单词摘出来到一个新的二维数组中

有问题请教,
怎样用C编写函数将一个字符串中所有单词摘出来到一个新的二维数组中(字符串中有数字和字母)例如aaa111aa11a1变换之后是三个字符串aaa,aa,a

  • 写回答

1条回答 默认 最新

  • chenxizhan1995 2019-11-13 00:46
    关注
    /*
    给定一行文本,拆分成单词。
    主要用到三个 string.h 中的库函数
    
    1. strncpy(s, ct, n); 把字符从 cn 复制到 s 中,最多复制 n 个字符;
    2. strpbrk(cs, ct)    在字符串 cs 中搜索任何属于 ct 的字符,并返回第一个位置指针,搜索不到则返回 NULL
    3. strspn(cs, ct)     返回cs中由 ct 里的字符构成的子字符串的长度
    
    */
    
    #include <stdio.h>
    #include <string.h>
    #define N 100
    
    // 要拆分的字符串
    char buf[N] = "aaa111aa11a1";
    
    // 设置单词包含的字符
    const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    char res[N][N]; // 保存结果
    int main()
    {
    
        if (buf == NULL){
            printf("空指针\n");
            return 1;
        }
        printf("原字符串是:%s:\n", buf);
    
        char *p=buf; // p 定位尚未搜索的字符
    
        int len = 0; // 辅助搜索
        int word_cnt = 0; // 有多少个单词
        // 搜索
        while (p=strpbrk(p, letters)){
            len = strspn(p, letters);
            strncpy(res[word_cnt++], p, len);  // res 是全局变量,默认初始化为全零。所以复制后不用补尾零。
            p+=len;
        }
    
        // 输出结果
        if (word_cnt > 0){
            printf("拆分出 %d 个单词: ", word_cnt);
            for (int i = 0; i<word_cnt; i++){
                printf("%s, ", res[i]);
            }
            printf("\n");
        }else{
            printf("没有发现单词\n");
        }
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝