首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将字符串中的单词提取到动态2D char数组中

的方法如下:

  1. 首先,定义一个函数,接受一个字符串作为参数,并返回一个动态2D char数组。
  2. 在函数内部,首先计算字符串中单词的个数。可以通过遍历字符串的每个字符,当遇到空格或者字符串结尾时,判断前一个字符是否为字母或数字,如果是,则单词个数加一。
  3. 根据单词个数,动态分配一个二维字符数组,大小为[单词个数][最长单词长度+1]。最长单词长度可以通过遍历字符串找到最长的单词长度。
  4. 再次遍历字符串,将每个单词逐个复制到动态数组中。可以使用两个指针,一个指向单词的起始位置,一个指向单词的结束位置。将单词复制到动态数组中后,将结束位置指针后移,继续寻找下一个单词。
  5. 最后,返回动态数组作为结果。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <cstring>

char** extractWords(const char* str) {
    int wordCount = 0;
    int maxLength = 0;
    int length = strlen(str);

    // 计算单词个数和最长单词长度
    for (int i = 0; i < length; i++) {
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')) {
            int wordLength = 0;
            while ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')) {
                wordLength++;
                i++;
            }
            if (wordLength > maxLength) {
                maxLength = wordLength;
            }
            wordCount++;
        }
    }

    // 分配动态数组
    char** words = new char*[wordCount];
    for (int i = 0; i < wordCount; i++) {
        words[i] = new char[maxLength + 1];
    }

    // 复制单词到动态数组
    int wordIndex = 0;
    for (int i = 0; i < length; i++) {
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')) {
            int wordLength = 0;
            int startIndex = i;
            while ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')) {
                wordLength++;
                i++;
            }
            strncpy(words[wordIndex], &str[startIndex], wordLength);
            words[wordIndex][wordLength] = '\0';
            wordIndex++;
        }
    }

    return words;
}

int main() {
    const char* str = "Hello, world! This is a test string.";
    char** words = extractWords(str);

    // 打印提取的单词
    for (int i = 0; words[i] != nullptr; i++) {
        std::cout << words[i] << std::endl;
    }

    // 释放动态数组内存
    for (int i = 0; words[i] != nullptr; i++) {
        delete[] words[i];
    }
    delete[] words;

    return 0;
}

这段代码将字符串中的单词提取到动态2D char数组中,并打印出提取的单词。你可以根据需要修改代码,适应不同的场景和要求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

开讲啦:Chap 06 利用数组处理批量数据

C语言不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值。...,'p','y'}; 6.3.5 字符数组的输入输出 字符数组的输入输出可以有两种方式: 逐个字符输入输出,用格式符%c输入或输出一个字符; 将整个字符串一次输入或输出,用%s格式符 【注】: 如果一个字符数组中包含一个以上...puts函数 - 输出字符串的函数 一般形式为:puts(字符数组),其作用是将一个字符串输出到终端。...strcpy和strncpy字符串复制函数 一般形式为:strcpy(字符数组1,字符串2),其作用是将字符串2复制到字符数组1中去。...strcnpy(str1,str2,2):可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去。

95730
  • 【编译原理】词法分析:CC++实现

    9.在处理标识符和关键字时,alphaprocess函数将连续的字母、数字和下划线组成的字符串放入字符数组alphatp中,并调用search函数判断该字符串的类型(关键字或标识符)。...11.如果前一个词法单元是运算符,则当前字符是正负号,将读取到的下一个字符存入 ch 数组的第二个位置,并使用 printf 函数输出识别结果,格式为 ("标识符", 3),其中标识符是识别到的正负号字符串...在函数内部,声明了一个字符数组 calcu,用于存储识别到的算术运算符。使用 for 循环将 calcu 数组的内容清空,将数组的每个元素都设置为字符串结束符 \0。...声明一个字符数组 note,用于存储注释内容。 4.使用 for 循环将 note 数组的内容清空,将数组的每个元素都设置为字符串结束符 \0。...在这个过程中,我遇到了一些困难,但也获得了宝贵的经验和收获。 首先,词法分析是编译过程中的第一个阶段,负责将源代码转换为一个个的单词或符号,作为后续语法分析的输入。

    1.6K10

    【Python】Python中的输入与输出——内附leetcode【151.反转字符串中的单词】的C语言三种解法以及Python解法

    /C++中的变量的数据类型为静态数据类型 Python中的变量的数据类型为动态数据类型 数据类型种类之间的差异: C语言中共有6大数据类型: 整型——字符型(char)、短整型(short)、整型(int...没错,在Python中,我们通过input()这个输入函数获取到的就是我们输入的一行字符串,为了能够让我们输入的内容变成我们需要的数据,这时就需要通过一系列的对字符串进行操作的内置函数来完成。...以上就是input函数的一个基本用法,通过这个基本用法我们就可以获取到输入的字符串,但是我们应该如何获取多个数据呢?难道是通过多个input吗?...反转字符串中的单词——双指针、字符串——中等 这一题在力扣中难度为中等,如果通过C语言来解题的话则有三种解题思路: 思路1:借助额外的空间来以单词为单位逆序存储源空间中的字符串 思路2:先反转整个字符串...,后反转字符串中的每一个单词 思路3:将字符串分割成一个一个的单词,再以单词为一个元素进行反转,最后通过空格拼接所有单词 思路1和思路2是通过双指针来进行求解,而思路3则是通过字符串中的不同的库函数来进行求解

    9210

    【优选算法】滑动窗口——leetcode——串联所有单词的⼦串(hard)

    串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。...s 中没有子串长度为 16 并且等于 words 的任何顺序排列的连接。 所以我们返回一个空数组。...hash2[out]-- 从 hash2 中移除 out,减少其频次。 left += len 将窗口左边界右移一个单词的长度。...pop_back(): 删除末尾的元素。 size(): 返回当前元素的个数。 operator[]: 通过索引访问元素。 std::vector 是一个动态数组,提供了可以动态调整大小的数组实现。...2. std::string 定义:std::string是C++标准库中的字符串类,用于处理字符序列。 特点: 动态大小:可以根据需求自动调整大小。

    7710

    【愚公系列】2023年11月 数据结构(十)-Trie树

    它基本思想是将一组字符串按字符顺序存储在树形结构中,利用相同的前缀来合并重复节点,从而实现快速的字符串查找和搜索。...注意,在这个示例中,我们默认单词只包含小写字母。如果需要支持其他字符集,需要根据情况调整节点数组的大小。...4.应用场景Trie树(又称前缀树或字典树)是一种树形数据结构,用于高效地搜索和插入字符串。Trie树常用于以下场景:字符串的查找和匹配:如文本编辑器中的自动补全、搜索引擎中的单词联想等。...单词统计:如在一组文本中统计单词出现的次数,可以将单词插入到Trie树中,并在每个单词的结尾节点记录出现的次数。IP地址的路由查找:在路由表中查找与给定IP地址最长匹配的前缀。...序列匹配:如在DNA序列匹配中,Trie树可以用于快速查找匹配模式。数据压缩:如将一个文本文件压缩成一个Trie树,可以达到较好的压缩效果。

    28712

    【优选算法篇】用滑动窗口解锁 5 大经典问题,轻松应对高频算法题(下篇)

    在基本的滑动窗口应用中,我们通常将窗口的大小固定或者通过某些条件来动态调整。...找到字符串中所有字母异位词 - 力扣(LeetCode) 题目描述: 2.1 算法思路: 统计目标字符串p的字符频率: 使用hash2数组来统计字符串p中每个字符的出现次数。...如果是,则说明当前窗口是p的一个字母排列,将窗口左端left的位置加入结果ret中。...每当right指针移动时,将当前字符加入窗口并更新hash1数组。当窗口大小超过p的长度时,left指针向右收缩窗口,并更新hash1数组。 3....滑动窗口通过动态调整左右指针,在遍历数组时灵活地扩展和收缩窗口,避免了暴力解法中不必要的重复计算,使得许多问题的时间复杂度从 O(n^2) 或更高,优化到 O(n)。

    7300

    Leetcode 212 Word Search II 字典树 + 回溯

    Given a 2D board and a list of words from the dictionary, find all words in the board....给一个矩阵,可以从任意一个位置开始,沿水平或垂直方向取连续字符组成字符串,问给定的字符串数组中有多少字符串可以从这个矩阵中生成。 直接套用之前trie的代码。...枚举每一个位置为起点进行dfs,dfs向四个方向搜索,如果当前位置的串不为树中某个词的前缀,则返回,否则看当前串是否为一个存在的单词并继续搜索。...需要注意用一个map维护出现过的单词,避免相同词重复加入结果容器。 同一个位置的字符在一个单词中只能使用一次,因此需要将搜索过的位置置为其他不为字母的字符,并在回溯时调整回来。...mp[now]) { mp[now] = true; res.push_back(now); } char

    53370

    【双指针进阶】深入理解双指针作用——滑动窗口题型带你一网打尽!

    窗口内动态维护字符串 s 的子串,满足包含 t 所有字符的条件。 哈希表统计: 使用一个哈希表 hash1 记录字符串 t 中每个字符的频次。...使用另一个哈希表 hash2 动态记录窗口中每个字符的频次。 窗口扩展和收缩: 扩展窗口:通过右指针 right 不断扩展窗口,将字符加入窗口。...} }; 串联所有单词的子串 解题思路: 算法: 初始化变量: hash1:存储 words 中每个单词的频次。...结果数组 ret:存储所有符合条件的子串起始索引。 单词长度 len,窗口长度 n * len。 滑动窗口遍历字符串: 枚举所有可能的起始偏移量 i(从 0 到 len-1)。...从偏移量 i 开始,以步长 len 遍历字符串 s,动态维护窗口状态。 动态调整窗口: 每次将一个单词加入窗口,更新 hash2。

    9710

    字典树(前缀树)

    有些参考书将堆直接定义为序列,但是,从逻辑结构上讲,还是将堆定义为完全二叉树更好。虽然堆的典型实现方法是数组,但从逻辑的角度上讲,堆实际上是一种树结构。...---- Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是用于统计和排序大量相同的字符串,所以经常被搜索引擎系统用于文本词频统计。...单词查询场景: 哈希不支持动态查询,如果我们要查询单词apple,hash表必须等待用户把单词apple输入完毕才能进行hash查询 字典树支持动态查询,比如用户输入到appl时,字典树此刻的查询位置就可以到达...l这个位置,那么我在输入e时,光查询e即可,字典树无需等待字符串全部输入完毕才能进行查询 ---- 代码实现 字典树中的字符是小写字母,那么每个节点放大小为 26 的数组即可,每个字符指向一个子节点,就是...如何从大量的 URL 中找出相同的 URL?

    65220

    CC++ 进程代码注入&提权&降权

    如果将shellcode注入到具有特定权限的进程中,我们就可以获得与该进程相同的权限,此方法可以用于提权与降权操作,注入有多种方式,最简单的是直接将metasploit生成的有效载荷直接注入到目标进程中...kernel32.dll地址,与GetProcaddress地址,然后就可以动态获取到任意函数的地址,先定义数据结构 typedef struct _ShellBase { // 针对Kernel32...,该字符串要存储到内存中,修改....// 调用的远程Shell代码 void __stdcall MyShell(PARAMETROS *ptr) { // 通过GetProcAddress获取到ws2.dll中的所有函数地址 ptr...首先使用注入器注入一个正在运行的进程,参数为PID 使用NC直接连接进去,即可获取到,与注入进程相同的权限,端口写死了9999 如果目标进程开启了,动态地址,ASLR,等则注入会失败,程序崩溃,这里需要注意一下

    1K30

    Java將字符串中单词首字母变大写

    参考链接: 使用ASCII值检查Java中的字符串是否仅包含字母 第一种方法: 拆分成单独的单词,再对其每一个单词的首字母变大写 public static void main(String[] args...String str = "this is a test of java";         String[] s = str.split(" ");         //用于接收转成大写的单词...s.length; i++) {             s[i] = s[i].substring(0, 1).toUpperCase()+s[i].substring(1);             //将取到的第一个字符转换成大写...类型字符串转换成字符数组             char[] a = s[i].toCharArray();             //取出每个单词的首字母,-32,编程对应字母的大写值的ASCII...码             a[0] = (char) (a[0]-32);             //使用String包装类valueOf(char[] data),将字符数组转换成字符串

    1.7K00

    C语言字符串IO

    char *name; scanf("%s",name); 分配内存的方法: 1.声明时显式指明数组的大小。 char name[80]; 2.使用C语言的库函数来分配内存。...动态内存分配(malloc等) int name = (int*)malloc(sizeof(int)*n) 字符串输入 gets()函数 简介 在读取字符串时,scanf()函数和转换符%s只能读取一个单词...= '\n') i++; words[i] = '\0'; //将\0替换为\n 如何丢弃掉仍存在输入行中的字符串?...= '\0') i++; if(words[i] == '\n')//将存储在字符串中的换行符替换成’\0‘ word[i] = '\0'...(类似于gets) 如果gets_s()函数读取到最大字符都没有读取到换行符时,会执行以下几步: 首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读取到换行符或文件结尾,然后返回空指针。

    4.6K10

    C语言经典100例002-将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中

    系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。...喜欢的同学记得点赞、转发、收藏哦~ 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即时查收 1 题目 编写函数fun() 函数功能:将M行N列的二维数组中的字符数据...,按列的顺序依次放到一个字符串中 例如: 二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容是:WSHWSHWSH [image.png] 2 思路 第一层循环按照列数进行...M 3 #define N 4 /** 编写函数fun() 函数功能:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中 例如: 二维数组中的数据为: W W W W S S S...S H H H H 则字符串中的内容是:WSHWSHWSH **/ // 0 1 2 3 // 0 W W W W // 1 S S S S // 2 H H H H char *fun(char

    6.1K30

    c语言程序设计谭浩强第五版第六章答案_谭浩强c语言答案第五版pdf

    题目解析及答案: 利用一个临时数组,空间要保证能够容纳两个字符串,先把第一个字符串进行拷贝到临时数组,第二个字符串在临时数组的尾部接着链接,最后记得加上字符串的结束标记\0即可 代码示例: #include...("%s", s2); ConcatStr(s1, s2, s); printf("\nThe new string is %s\n", s); return 0; } 运行结果: 7、写一个函数,将一个字符串中的元音字母复制到另一字符串...str[80], c[80]; printf("input string:"); gets(str); cpy(str, c); //将str中的元音字母拷贝到c中 printf("The vowel...,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输人字符串以及输出上述的结果。...题目解析及答案: 单词以空格进行分隔,因此寻找空格出现的位置即为关键,每次从单词的起始到空格出现的位置即为一个单词,此时计算单词的长度,如果比当前最大的还长,就进行跟新最长单词信息,当整个字符串遍历完成

    1.4K30

    Excel实战技巧104:使用Excel公式创造一个随机句子

    有两种方法可以用来创造随机句:使用Excel365中的动态数组,或者老版本Excel中的常规函数。...方法1:使用Excel365中的动态数组 随机句子是由字母和标点符号组成的随机字符串,为简单起见,这里将字符集限制为a到z的字母和空格、句点。...RANDARRAY函数是Excel 365中新引入的一个动态数组函数。其中的数字97在ASCII码中代表“a”而122代表“z”,多余的两个数字代表空格和句点。...CHAR(RANDARRAY(…)):将随机数转换成等效的字母(a至z、{和|)。 CONCAT(CHAR(…)):将所有字母连接成一个大的120个字母字符串。...FIND获取#的位置。 LEFT从左返回单元格F6中的单词,直至发现#符号为止。 注:本文学习整理自chandoo.org,供有兴趣的朋友参考。

    1.8K50
    领券