的方法如下:
以下是一个示例代码:
#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数组中,并打印出提取的单词。你可以根据需要修改代码,适应不同的场景和要求。
没有搜到相关的文章