Tag: 字符串

使用后缀数组和LCP(-LR)实现字符串模式匹配

在过去的几周里,我试图弄清楚如何在另一个字符串中有效地找到字符串模式。 我发现很长一段时间,最有效的方法是使用后缀树。 但是,由于这种数据结构在空间上非常昂贵,我进一步研究了后缀数组的使用(使用的空间要少得多)。 不同的论文,如“后缀数组:一种新的在线字符串搜索方法”(Manber&Myers,1993)指出,搜索子字符串可以在O(P + log(N))中实现(其中P是通过使用二进制搜索和后缀数组以及LCP数组,模式的长度和N是字符串的长度。 我特别研究了后一篇论文来理解搜索算法。 这个答案在帮助我理解算法方面做得很好(顺便把它变成了LCP维基百科页面 )。 但我仍在寻找实现此算法的方法。 特别是所提到的LCP-LRarrays的构造看起来非常复杂。 参考文献: Manber&Myers,1993:Manber,Udi; Myers,Gene,SIAM Journal on Computing,1993,Vol.22(5),pp.935-948, http: //epubs.siam.org/doi/pdf/10.1137/0222058 更新1 只是为了强调我感兴趣的东西:我理解LCP数组,并找到了实现它们的方法。 但是,“普通”LCParrays不适合有效的模式匹配(如参考文献中所述)。 因此,我对实现LCP-LRarrays感兴趣,这似乎比实现LCParrays复杂得多 更新2 添加了参考文件的链接

如何在我的C代码中返回一个字符串?

我是C初学者,这是我的C代码: #include #include main() { printf(“Hello world !\n”); return ‘sss’; } 这将显示错误, 那么如何在C代码中返回一个字符串?

strlen性能实现

这是一个多function问题: 这与glibc strlen实现相比如何? 有没有更好的方法来实现这一点和自动向量化。 随机填充垃圾,因为stackoverflow以某种方式比我更了解代码到汇总比率 #include #include #include #include #include #include /* Todo: Document */ #define WORD_ONES_LOW ((size_t)-1 / UCHAR_MAX) #define WORD_ONES_HIGH (((size_t)-1 / UCHAR_MAX) << (CHAR_BIT – 1)) /*@doc * @desc: see if an arch word has a zero * #param: w – string aligned to word size */ static inline bool word_has_zero(const size_t […]

在文本文件C中搜索字符串

以下代码一次读取一个字符的文本文件并将其打印到stdout: #include int main() { char file_to_open[] = “text_file.txt”, ch; FILE *file_ptr; if((file_ptr = fopen(file_to_open, “r”)) != NULL) { while((ch = fgetc(file_ptr)) != EOF) { putchar(ch); } } else { printf(“Could not open %s\n”, file_to_open); return 1; } return(0); } 但是不是打印到stdout [putchar(ch)]而是我想在文件中搜索另一个文本文件中提供的特定字符串,即。 strings.txt并输出匹配到out.txt的行 text_file.txt : 1993年 – 1999年奔腾 1997年 – 1999年Pentium II 1999年 – 2003年奔腾III […]

在C中处理多字节(非ASCII)字符

我正在尝试自己的版本的wc(unixfilter),但我有非ASCII字符的问题。 我做了一个文本文件的HEX转储,发现这些字符占用多个字节,所以它们不适合char。 有什么方法我怎么能从文件中读取这些字符并像C一样处理它们(所以我可以计算文件中的字符)? 我一直在谷歌搜索并找到一些wchar_t类型,但没有任何简单的例子如何将它与文件一起使用。

如何获取字符串的第n个字符?

我有一个字符串, char* str = “HELLO” 如果我想从中获得E ,我该怎么做?

C中sizeof()返回值的正确格式说明符

我有以下代码: #include int main() { printf(“The ‘int’ datatype is \t\t %lu bytes\n”, sizeof(int)); printf(“The ‘unsigned int’ data type is\t %lu bytes\n”, sizeof(unsigned int)); printf(“The ‘short int’ data type is\t %lu bytes\n”, sizeof(short int)); printf(“The ‘long int’ data type is\t %lu bytes\n”, sizeof(long int)); printf(“The ‘long long int’ data type is %lu bytes\n”, sizeof(long long int)); […]

sscanf不移动,每次都扫描相同的整数

我有一个包含整数的字符串,我试图将所有的内容放入另一个数组中。 当sscanf找不到int我希望循环停止。 所以,我做了以下事情: int i; int getout = 0; for (i = 0; i < bsize && !getout; i++) { if (!sscanf(startbuffer, "%d", &startarray[i])) { getout = 1; } } //startbuffer is a string, startarray is an int array. 这导致startarray所有元素都是startarray中的第一个char。 sscanf工作正常但它不会移动到下一个int它只停留在第一个位置。 知道什么是错的吗? 谢谢。

如何在C 中检查字符串是否以“.csv”结尾

如何检查字符串是否以C “.csv”结尾 我尝试过使用strlen而没有任何成功

gcc和turbo C的输出差异

为什么使用两个编译器gcc和turbo c编译代码时产生的输出有所不同。 #include int main() { char *p = “I am a string”; char *q = “I am a string”; if(p==q) { printf(“Optimized”); } else{ printf(“Change your compiler”); } return 0; } 我在gcc上得到了”Optimized” ,在turbo c上得到了”Optimized” “Change your compiler” 。 为什么?