gpt4 book ai didi

c - 存储到类型 'char'的空指针

转载 作者:行者123 更新时间:2023-11-30 14:32:42 26 4
gpt4 key购买 nike

当我在 leetcode 上解决问题 3 时,我遇到了这个问题。我编写了代码,它可以在 Dev-C++ 编译器上运行,我复制代码并粘贴到 leetcode 上。出现此错误:第10行:Char 9:运行时错误:存储到“char”类型的空指针(solution.c)。我检查了代码,但找不到一些问题。我希望获得一些帮助.代码粘贴在下面。

int lengthOfLongestSubstring(char * s){
int longestlength = 0; // 最长子串的长度
int i = 0;
char *temp; // 存储子串
char *p;
char *base;

* temp = * s; // *temp存储s的第一个字符
base = temp;

while(*++s != '\0') {
p = base;
while(*p++ != '\0') {
if (*p == *s) {
*temp = '\0';
break;
}
}
if (*temp == '\0') {
*temp++ = *s;
base = temp;
i = 0; // 重新计数
}
else {
*++temp = *s;
++i;
}
longestlength = i > longestlength ? i : longestlength;
}

return longestlength;
}
测试实例
char* s = "pwwkew";

最佳答案

该函数是leetcode here提出的问题的建议解决方案。

据我了解,我们必须返回不重复字符的最长子字符串的长度。当最后一个字符出现在子字符串中的任何位置时,子字符串结束。

所提供的代码存在很多问题。

  • 该错误是因为temp没有存储空间。
  • basetemp 的副本,它不是终止字符串,但使用指针 p 对其进行扫描。
  • i 在某些条件下会递增,但永远不会重置为零。当一个新的子字符串开始时,它应该重置为0。
  • 等等

我不明白这段代码如何提供预期的答案。

算法如下。

我们从第一个字母位于索引i(初始化为0)的子字符串开始,然后我们考虑索引j处子字符串的最后一个字符。我们检查该字符是否存在于子字符串中。如果是,我们就遇到了子字符串的结尾。它的长度是j-i。然后将longestLength 设置为longestLength 和j-i 中的最大值。我们通过将 i 设置为子字符串中重复字母后面的字母来开始一个新的子字符串。最后,我们增加j

这是代码

int lengthOfLongestSubstring(char *s){
if (s == NULL || *s == '\0')
return 0;
int longestlength = 1;
int i = 0, j = 1;
while (s[j] != '\0') {
// check if s[j] is in substring
int k = i;
while (k < j) {
if(s[k] == s[j])
break;
k++;
}
// if we found a duplicate letter at index k
if (k != j) {
// we reached the end of the substring
longestLength = j-i > longestLength ? j-i : longestLength;
// next substring start at k+1
// and is one character long
i = k+1;
j = i;
}
j++;
}
return longestLength;
}

关于c - 存储到类型 'char'的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com