Tag: 字符串

c中是否有一个函数会返回char数组中char的索引?

c中是否有一个函数会返回char数组中char的索引? 例如: char values[] = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”; char find = ‘E’; int index = findInedexOf( values, find );

在C中创建字符串的方法有什么区别?

C语言中这两种forms的字符串变量有什么区别? char *string1; char string2[]; 还有其他办法吗? 非常感谢你。

如何将字符串的最后n个字符与C中的另一个字符串进行比较

想象一下,我有两个字符串,其中一个是“/sdcard/test.avi”之类的url,另一个是“/sdcard/test.mkv”。 我想写一个if语句,查看字符串的最后四个字符是否为“.avi”或不是C.我怎么能这样做? 使用strcmp或者是什么以及如何使用?

scanf动态分配

无论出于何种原因,以下代码打印(null): #include #include int main(void) { char *foo; scanf(“%ms”, &foo); printf(“%s”, foo); free(foo); } 我正在尝试动态地为字符串分配内存,但正如我之前所说,我的程序只是输出(null)。 我通过使用getche和realloc创建一个函数来解决这个问题,但是由于我还必须编写用户输入退格键,制表符等所会发生的事情,这似乎几乎毫无意义。但正如我所说的那只是一项工作周围,​​我宁愿知道为什么上面的代码不起作用… 附加信息: 我正在使用Pelles C IDE v7.00并使用C11标准进行编译

在c中分配内存并保存字符串

我想知道为什么以下代码不起作用 int main(int argc, char **argv) { char *test = (char*) malloc(12*sizeof(char)); test = “testingonly”; free(test); } 在考虑之后,我的假设是首先在内存中为12个字符分配空间,但是下一行中的赋值在堆栈上创建一个char数组,并将其内存地址传递给test。 所以free()尝试释放堆栈上不允许的空间。 那是对的吗? 那么在堆上保存字符串的正确方法是什么? 以下是一种常见的方式吗? int main(int argc, char **argv) { char *test = (char*) malloc(12*sizeof(char)); strcpy(test, “testingonly”); free(test); }

用于查找2个字符串之间任意长度的所有共享子串的算法,然后计算字符串2中的出现次数?

我遇到了一个不同寻常的挑战,到目前为止,我无法确定最有效的攻击方法。 给定以下2个字符串作为示例,查找任意长度的2个字符串之间的所有共享子字符串,并计算字符串2中所有这些共享子字符串的出现次数。您的算法还需要能够计算之间的共享子字符串包含最大100MB或更大的字符串的文件。 例: 字符串1:ABCDE512ABC361EG51D 字符串2:ADE5AHDW4131EG1DG5C 给定这2个字符串,该算法将找到以下共享子串:A,C,D,E,5,1,3,G,DE,E5,EG,G5,1D,DE5,1EG 然后从这些共享的子串中,我们可以发现字符串2中每个子串的出现次数。 答:字符串2中出现2次 C:字符串2中出现1次 D:字符串2中出现3次 等等.. 我用来解决这个问题的第一种方法是粗暴地强迫我使用2个嵌套for循环来计算公共共享子串 – 显然效率最低但是这是一种快速而肮脏的方式来了解预期的输出应该使用较小的测试输入和最慢的运行时间,大约2分钟来计算包含ascii字符串,大小为50kb的2个文件之间的所有常见共享子字符串。 将大小增加到1mb会导致这种情况急剧下降,因为计算此事件时必须进行大量的嵌套迭代。 下一个方法是使用树 – 看看我可以用多少内存来优化计算时间。 这种方法要快得多。 使用蛮力方法花费2分钟的两个50kb文件几乎是即时的。 对1mb文件运行速度非常快(秒)但是当我继续测试越来越大的文件大小时,由于树的大小,我很快就开始遇到内存问题。 注意:字符串文件只包含ASCII字符! 编辑: 我正在进一步升级,请看: https://gist.github.com/braydo25/f7a9ce7ce7ad7c5fb11ec511887789bc

如何使用指针复制字符串

这是我写的一个复制字符串常量的程序。 程序运行时崩溃。 为什么会这样? #include char *alpha = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”; char c; char *l; main(){ while((c = *alpha++)!=’\0′) *l++ = *alpha; printf(“%s\n”,l); }

Lua是否优化了“..”运算符?

我必须执行以下代码: local filename = dir .. “/” .. base 循环中数千次(这是一个打印目录树的递归)。 现在,我想知道Lua是否一次性连接3个字符串(dir,“/”,base)(即,通过分配足够长的字符串来保存它们的总长度),或者它是否通过内部执行它来实现这种效率低下的方式两步: local filename = (dir .. “/”) — step1 .. base — step2 最后一种方式是内存方式效率低下,因为分配了两个字符串而不是一个字符串。 我不太关心CPU周期:我主要关心内存消耗。 最后,让我概括一下这个问题: Lua在执行以下代码时是否只分配一个字符串或4? local result = str1 .. str2 .. str3 .. str4 .. str5 顺便说一句,我知道我能做到: local filename = string.format(“%s/%s”, dir, base) 但我还没有对它进行基准测试(内存和CPU方面)。 (顺便说一句,我知道table:concat()。这会增加创建表的开销,所以我猜它在所有用例中都不会有用。) 奖金问题: 如果Lua没有优化“..”运算符,那么定义用于连接字符串的C函数是一个好主意,例如utils.concat(dir, “/”, base, “.”, extension) ?

如何编写更好的strlen函数?

我正在阅读“编写伟大的代码卷2”并显示以下strlen inslementation: int myStrlen( char *s ) { char *start; start = s; while( *s != 0 ) { ++s; } return s – start; } 这本书说这种实现对于没有经验的C程序员来说是典型的。 在过去的11年里,我一直在使用C语言进行编码,我无法在C中看到如何编写比这更好的函数(我可以想到在汇编中编写更好的东西)。 如何在C中编写比这更好的代码? 我看了glibc中strlen函数的标准库实现,我无法理解它的大部分内容。 在哪里可以找到有关如何编写高度优化代码的更好信息?

如何在C中实现可变长度的’string’-y

我已经google了很多,但我找不到有关如何在高级语言中实现可变长度字符串的信息。 我正在创建自己的这种语言,我不知道从哪里开始使用字符串。 我有一个描述string类型的结构,然后是一个分配这样一个’字符串’的create函数: /* A safer `strcpy()`, using `strncpy()` and `sizeof()` */ #define STRCPY(TO, FROM) \ strncpy(TO, FROM, sizeof(TO)); TO[sizeof(TO) – 1] = ‘\0’ struct string { // … char native[1024]; }; string String__create(char native[]) { string this = malloc(sizeof(struct string)); // … STRCPY(this->native, native); return this; } 但是,这只允许1kb长的字符串。 这有点愚蠢,在大多数情况下会浪费大量内存。 鉴于我必须以某种方式声明要使用的内存…我如何实现一个能够(有效地)存储(有效)无限数量的字符的字符串?