【发布时间】:2021-06-10 22:25:07
【问题描述】:
cin.get(a, 256);
for(int i = 0; i < strlen(a); i++){
if(strchr("aeiou", a[i])){
s = 0;
strcpy(substr, empty);
isubstr = 0;
}
else{
s++;
substr[isubstr++] = a[i];
if(s > maax || s == maax){
maax = s;
memset(show, 0, 256);
strcpy(show, substr);
}
}
}
cout << show;
这是代码。它打算找到只有辅音的最长子串,如果有 2+ 个具有相同长度,则输出最远的子串(更靠近右侧)
考虑以下顺序:
jfoapwjfppawefjdsjkflwea
被元音分割后看起来像这样:
jf |oa| pwjfpp |a| w |e| fjdsjkflw |ea|
请注意“fjdsjkflw”是如何成为没有元音的最大子字符串。此代码仅输出最后包含一些随机数的内容:
fjdsjkflwê²a
为什么会这样?为什么它会将 NULL 3 个字符超出预期?
【问题讨论】:
-
仅供参考 --
for(int i = 0; i < strlen(a); i++)-- 您在循环的每次迭代中调用strlen(a)。太浪费了。 -
为什么会浪费? @PaulMcKenzie
-
您确实意识到
strlen必须扫描字符串以查找空字节?如果字符串是 256 个字符怎么办?每次循环迭代时,您都将扫描字符串,使代码实际上总共有 65536 个字符。计算一次strlen,将其存储在一个变量中,然后在for循环中使用该变量。 -
啊,他们以错误的方式教授 C++,正如 Kate Gregory 的演示文稿中所指出的那样。
-
在向其添加字符之后,或在将其复制到
show之前。 (substr[isubstr] = '\0';
标签: c++ substring max c-strings function-definition