c - 从字符数组中获取当前单词的最有效方法

标签 c optimization string-search

假设我有一个字符串“text”,一个插入符位置“caret”,然后想找到当前单词(以空格分隔)。

我目前的做法似乎效率低下,我想知道是否有人有有效的做法?

const char* text;
int caret;
int initpos;
int start;
int count = 0;
char word[256];

// text and caret values assigned here.

initpos = caret;
while(caret > 0 && text[caret] != ' ') // get start
{
    caret--;
    count++;
}
start = caret;
caret = initpos;

while(text[caret] && text[caret] != ' ') // get end
{
    caret++;
    count++;
}

word = strsub(text, start, count);

最佳答案

“看起来效率低下”是指代码对您来说看起来效率低下,还是您已经测量并发现它对您来说太慢了?

您的方法需要 O(n) 步,其中 n 是输入中最长单词的长度。除非你的单词有 DNA 串那么大,否则这已经相当快了。

对于某些数据集,更快的方法是使用单词开始和结束位置的索引。存储间隔的二叉搜索树符合此要求,但代价是 O(lg N) 检索时间,其中 N 是输入中的单词数。可能不值得。

关于c - 从字符数组中获取当前单词的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5192986/

相关文章:

c - 字符串中的 C 字符串指针如何​​以空值终止?

在普通的旧 C 中抛弃 volatile

python - 使用两个 DataFrame 的 Pandas groupby 总和

python - 包含方括号的搜索模式

c# - 如何按顺序检查字符串中的单词

c - 文本行的操作

c - 我如何组织一个列表,其元素存储在一个结构中?

python - 使用分组边界的 SciPy 优化

c - 查找数字是否在范围内的最快方法

algorithm - Boyer Moore算法的理解和例子?