不使用字符串库的c中的字符串长度
我对此深思熟虑了好几个小时,但还是想不出来。。 仅使用stdio.h string.h是不允许的,但只使用基本的东西 如何获取字符串长度?有人请帮帮我不使用字符串库的c中的字符串长度,c,string-length,C,String Length,我对此深思熟虑了好几个小时,但还是想不出来。。 仅使用stdio.h string.h是不允许的,但只使用基本的东西 如何获取字符串长度?有人请帮帮我 目标是找到给定字符串中输入模式的频率 ex ha=>2,di=>1 帮帮我。至于字符串的长度,strlen的实现并不复杂。 您只需在字符串上循环,直到找到字符串的\0结尾,并计算循环次数 char* str = "\ a-a-a-a\ differing the text, because that was the
目标是找到给定字符串中输入模式的频率 ex ha=>2,di=>1
帮帮我。至于字符串的长度,strlen的实现并不复杂。 您只需在字符串上循环,直到找到字符串的\0结尾,并计算循环次数
char* str =
"\
a-a-a-a\
differing the text, because that was the lecture thing\
the text has been changed\
I know!\
the text has been changed\
";
这可以缩短为
unsigned int mystrlen(const char* str)
{
unsigned int length = 0;
while (*str != 0)
{
str++;
length++;
}
return length;
}
至于字符串的长度,strlen的实现并不复杂。 您只需在字符串上循环,直到找到字符串的\0结尾,并计算循环次数
char* str =
"\
a-a-a-a\
differing the text, because that was the lecture thing\
the text has been changed\
I know!\
the text has been changed\
";
这可以缩短为
unsigned int mystrlen(const char* str)
{
unsigned int length = 0;
while (*str != 0)
{
str++;
length++;
}
return length;
}
纯C中的字符串只是指向内存的指针。 如果最后一个元素为0,则可以使用strlen或任何检查该元素的方法。 但如果不是这样,你需要记住变量的长度
因此,如果它以0结尾,只需循环到第一个元素,即0而不是“0”,这就是结束。如果你计算了元素,你就得到了字符串长度。纯C语言中的字符串只是指向内存的指针。 如果最后一个元素为0,则可以使用strlen或任何检查该元素的方法。 但如果不是这样,你需要记住变量的长度
因此,如果它以0结尾,只需循环到第一个元素,即0而不是“0”,这就是结束。如果你计算了元素,你就得到了字符串长度。这对一些测试输入字符串有效,但我强烈建议用更多的例子来检查它 假设我们已经实现了strstr strstr 是string.h库中的C库函数 char*strstrconst char*干草堆,const char*针 此函数用于查找源字符串haystack中第一个出现的子字符串指针 不比较终止字符\0 有些版本 代码 暗示 我从mystrstrstr的第一个参数中删除了const,因为我想在以后更改它,这是我对原始代码所做的唯一更改 此版本对字符串中的大小写字母敏感, 例如,苹果与苹果不同 正如chux在评论中所说,我的代码从源代码返回ababa的子字符串 只有aba{aba}没有更多。这是因为我改变了字符串指针,而在最后一个 暗示
尝试实现您的strstrstr版本,strlen这适用于某些测试输入字符串,但我强烈建议使用更多的案例来检查它 假设我们已经实现了strstr strstr 是string.h库中的C库函数 char*strstrconst char*干草堆,const char*针 此函数用于查找源字符串haystack中第一个出现的子字符串指针 不比较终止字符\0 有些版本 代码 暗示 我从mystrstrstr的第一个参数中删除了const,因为我想在以后更改它,这是我对原始代码所做的唯一更改 此版本对字符串中的大小写字母敏感, 例如,苹果与苹果不同 正如chux在评论中所说,我的代码从源代码返回ababa的子字符串 只有aba{aba}没有更多。这是因为我改变了字符串指针,而在最后一个 暗示
尝试实现您的strstr版本,对于i=0,使用strlen;str[i];i++;。这将有助于您更详细地解释它?如果您确实有可用的库函数,那么您可以按照编写代码的方式来分解它,然后手动实现缺少的库函数。@BrianCain我知道,但是在给定字符串中计算子字符串的频率太复杂和太广泛了…在给定字符串中查找输入模式的频率->如果字符串是aba,模式是aba,那么会计为1或2次出现吗?对于i=0;str[i];i++;。这将有助于您更详细地解释它?如果您确实有可用的库函数,那么您可以按照编写代码的方式来分解它,然后手动实现缺少的库函数。@BrianCain我知道,但是在给定字符串中计算子字符串的频率太复杂和太宽了…在给定字符串中查找输入模式的频率->如果字符串是aba,模式是aba,那么会计算为1或2次出现吗?小调:strlen返回一个大小,而不是int。@chux我可以自由使用int。毕竟,这是我的strlen:然而,实际上,使用无符号返回值更好,Iguess@chux感谢您的专家评论,您是否有一些东西表明使用size\u t比int或unsigned int更好,我认为在旧平台上使用size\u t不会有一些问题。自从C89/90以来
,使用include定义大小。对于标准前代码,>37岁的用户,您只能依靠自己,这不是标准解决方案。因此,我会跟随你的无符号。小调:strlen返回一个size\u t,而不是int。@chux我自由地使用int。毕竟这是我的strlen:不过,使用无符号返回值确实更好,我guess@chux感谢您的专家评论,您是否有一些东西表明使用size\u t比int或unsigned int更好,我认为在旧的平台上使用大小不会有问题。自从C89/90以来,使用include来定义大小。对于标准前代码,>37岁的用户,您只能依靠自己,这不是标准解决方案。为此,我会跟随你的未签名。
char* mystrstr(char *str, const char *target) {
if (!*target) {
return str;
}
char *p1 = (char*)str;
while (*p1) {
char *p1Begin = p1, *p2 = (char*)target;
while (*p1 && *p2 && *p1 == *p2) {
p1++;
p2++;
}
if (!*p2){
return p1Begin;
}
p1 = p1Begin + 1;
}
return NULL;
}