gpt4 book ai didi

c - 编写一个方法来替换 C 样式字符串中的所有空格

转载 作者:太空狗 更新时间:2023-10-29 17:15:41 26 4
gpt4 key购买 nike

我遇到过这个面试问题,希望得到一些帮助来理解它的解决方案:

编写一个方法,将字符串中的所有空格替换为‘%20’。

解决方案(来自论坛):

char str[]="helo b";
int length = strlen(str);
int spaceCount = 0, newLength, i = 0;

for (i = 0; i < length; i++) {
if (str[i] == ' ') {
spaceCount++; //count spaces...
}
}

newLength = length + spaceCount * 2; //need space for 2 more characters..
str[newLength] = '\0';

for (i = length - 1; i >= 0; i--) {
if(str[i] == ' ') {
str[newLength - 1] = '0'; //???
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength = newLength - 3;
} else {
str[newLength - 1] = str[i];
newLength = newLength - 1;
}
}

这个程序不适合我......我想在深入研究代码之前先了解算法。

最佳答案

那个样本坏了。

缓冲区溢出,对字符串 (strlen) 进行一次毫无意义的扫描,难以阅读。

int main() {
char src[] = "helo b";
int len = 0, spaces = 0;
/* Scan through src counting spaces and length at the same time */
while (src[len]) {
if (src[len] == ' ')
++spaces;
++len;
}
/* Figure out how much space the new string needs (including 0-term) and allocate it */
int newLen = len + spaces*2 + 1;
char * dst = malloc(newLen);
/* Scan through src and either copy chars or insert %20 in dst */
int srcIndex=0,dstIndex=0;
while (src[srcIndex]) {
if (src[srcIndex] == ' ') {
dst[dstIndex++]='%';
dst[dstIndex++]='2';
dst[dstIndex++]='0';
++srcIndex;
} else {
dst[dstIndex++] = src[srcIndex++];
}
}
dst[dstIndex] = '\0';
/* Print the result */
printf("New string: '%s'\n", dst);
/* And clean up */
free(dst);
return 0;
}

关于c - 编写一个方法来替换 C 样式字符串中的所有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5203142/

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