如何给字符串添加空格
在网上看到一个算法题。大意是:写一个函数fun(char *str,char ch),完成如下功能:
1、删去字符串中指定的字符 2、传回的字符串的字符间加个空格。
例如:给出的字符串为:A[]=abcdefabcdaefa 输入字符a
输出的字符串为:B[]=b c d e f b c d e f
小弟完成的代码如下,但是最后输出的是 bcdefbcdef,不知道错在哪里,还请各位大侠帮忙指教,谢谢。
char *fun(char *str,char c){ int i=0,j=0; char *str1; int len=strlen(str); for(i=0;i<len;i++) { if(str[i] == c) continue; str[j++]=str[i]; } str[j++]='\0'; str1 = (char *)malloc(2*(strlen(str))+1); for(i=0;i<j;i++) { str1[2*i]=str[i]; str1[2*i+1]=' '; } return str1; }
#include <stdio.h>#include <string.h>#include <stdlib.h>char *fun(char *str,char c){ int i=0,j=0; char *str1; int len=strlen(str); for(i=0;i<len;i++) { if(str[i] == c) continue; str[j++]=str[i]; } str[j++]='\0'; str1 = (char *)malloc(2*(strlen(str))+2); // 这里要多加一个 for(i=0;i<j;i++) { str1[2*i]=str[i]; str1[2*i+1]=' '; } return str1; }int main(void){ char str[] = "abcdefabcdaefa"; char *str2 = fun(str, 'a'); printf("%s\n", str2); if (str2) { free(str2); str2 = NULL; } return 0;}
[解决办法]
int BigLen=MAX(2*(strlen(str))+1, strlen(str)+1);
str1 = (char *)malloc(BigLen);
[解决办法]
你穿出字符串不是动态分配的吗,跟给出的字符串长度没关, 貌似malloc里面要多加1
[解决办法]
我直接copy的你的代码:
然后只是增加了main函数,调用代码如下:
char str[]="abcdefabcdaefa";
char *p = fun(str, 'a');
printf("%s \n", p);
圆满的输出了正确的结果
我没有使用集成工具运行,就是简单的在linux的命令行下执行的
不知道以上回答对你有没有用,祝你顺利
[解决办法]