Tag: 字符串

c字符串比较与哈希比较

我需要将一个字符串与c中的多个其他常量字符串进行比较。 我很好奇哪个更快,散列我要比较的字符串并将其与所有其他常量字符串哈希进行比较,或者只是将字符串作为字符串进行比较。 先感谢您 谢谢你的答案,我将做很多比较。 任何人都可以给我一个好的,快速的,低资源密集型的算法吗? 我所知道的唯一哈希是MD5,我有一种过度杀戮的感觉。 我还想补充一点,字符串最大可能是20或30个字符,大多数是7左右。

字符串常量与C中的char数组

可能重复: C中的char s []和char * s有什么区别? 更多的是一般性问题,而不是试图解决问题,我一直在阅读C编程语言书,他们注意区分 char amessage[] = “blah”; char *pmessage = “blah”; 一个是char数组,另一个是指向字符串常量的指针。 他们说修改char数组是可以接受的,但你不应该修改字符串常量,因为它会触发未定义的行为。 我的问题是:不是以与char数组相同的方式存储在内存中的字符串常量吗? 为什么我可以修改它 char *p = “this is a string constant”; *(p+2) = ‘a’; printf(“%s”, p); 如您所料,结束打印“thas是一个字符串常量”。 我可以理解它是如何有意义的,因为字符串常量不应该最终在运行时被更改,因为它可能会混淆其他人/你自己处理你的代码并不期望它的价值改变,但纯粹function性的术语是什么错误的什么是可能触发的未定义行为,以及当char数组不能时它会如何机械地适得其反? 我只是想知道我是否遗漏了一些关于字符串常量如何在内存中工作以及编译器如何看到它们的内容。

如何根据字符串的值访问`struct’的成员?

我想通过使用字符串的值来访问结构中的成员: struct hello_world { char rate; char ssid; }; 有一个varibale让我们说 char *string=”ssid”; 我想使用此字符串的值来引用hello_world结构中的ssid成员。 这可能吗?

如何在C中将char数组转换为整数?

如何在下面的代码中将char数组x转换为整数89 ? 谢谢 int main(int argc,char *argv[]){ char y[13] = “0123456789012”; char x[3]; int integer_value; x[0] = y[8]; x[1] = y[9]; x[3] = ‘\0’; integer_value=atoi(x); }

在C中递归地反转一个字符串?

我必须在递归函数中反转一个字符串,但我不能使用循环或strlen来查找字符串结尾的位置。 然后我必须将反转的字符串传递回main并将其复制到新文件。 这是我到目前为止所拥有的: int reverse(char *str, char *strnew, int p) { char temp=str[p]; if(temp==’\0′ || temp==’\n’) { strnew=str; return p; } else { reverse(str++, strnew, ++p); p–; strnew[p]=str[p]; printf(“strnew: %c\n”, strnew[p]); return 0; } } int main(int argc, char *argv[]) { FILE *fp; char buffer[100]; char newstr[100]; int pointer=0; fp=fopen(“lab8.txt”, “r”); if(fp==NULL) { printf(“Error opening […]

在C中的for循环条件中调用strlen()的最佳替代方法是什么?

我已经读过在我的for循环条件中调用strlen()是不好的做法,因为这是一个O(N)操作。 但是,在查看备选方案时,我会看到两种可能的解决方 int len = strlen(somestring); for(int i = 0; i < len; i++) { } 要么… for(int i = 0; somestring[i] != ‘\0’; i++) { } 现在,第二个选项似乎可能具有以下优点:1)不声明不必要的变量,2)如果字符串长度在循环中被修改,只要长度不是<i,它应该仍然到达终点。 但是,我不确定。 其中哪一个是C程序员的标准做法?

使用C中的fputs写入文件

有人能告诉我为什么文件不会改变? 它在我使用rewind或fseek但不是。 在fgets之后使用fputs的标准方法是什么。 文件指示器位于第9位,因此fputs必须在此之后写入,但它不会执行任何操作。 在档案中: abcd efgh ijkl mnor 在源代码中: char c; char str[15]; FILE *fp = fopen(“d:\\data.txt”,”r+”); fgets(str, 10, fp); // fseek(fp, 9, SEEK_SET); // rewind(fp); printf(“%d\n”, ftell(fp)); // ftel shows that it’s in “9”. printf(“%s”, str); fputs(str, fp); // why its not working fclose(fp);

注意c中字符串的奇怪行为

仍然处于学习模式,可能是下面的问题是一个非常愚蠢,但我不知道为什么会发生.. #include int main() { /* code to accept string and then a character from stdin */ char str[20], inp; /*take string from stdin */ printf(“string:\n”); scanf(“%s”,str); fflush(stdin); /*input a character */ printf(“char:\n”); scanf(“%c”,&inp);/* code does not reach this point and exits */ } 正如评论中所提到的,在我输入字符串之后,例如。 ‘strng’代码只是在打印char后退出:但它不会等我输入字符。 根据我的理解,我已经给出了足够大的数组大小来存储字符串,如果输入的字符串小于str数组的大小,编译器将自动在字符串的末尾添加空字符并继续进行。 我错过了什么或者我的代码中有错误。 请建议。 谢谢。

使用C,将动态分配的int数组尽可能干净地转换为逗号分隔的字符串

我在C语言方面的经验比在高级语言方面要差得多。 在Cisco,我们使用C,有时我会遇到一些在Java或Python中很容易做到的事情,但在C中很难做到。现在就是其中之一。 我有一个动态分配的无符号整数数组,我需要转换为逗号分隔的字符串进行日志记录。 虽然整数不太可能非常大,但它们在概念上可以是0到4,294,967,295。在Python中,这是一条短线。 my_str = ‘,’.join(my_list) 人们在C中做到这一点有多优雅? 我提出了一个方法,但这很糟糕。 如果有人知道这样做的好方法,请赐教。

在C中按空格拆分字符串

我正在使用C并通过套接字我将收到一条消息,其中包含一个空格,我需要将字符串拆分为空格中的部分。 我该怎么做呢?