文章目录
1.void CutSpace1(char* StrRes, char* StrDec)
在调用函数申请栈空间,可以在被调用函数中使用;
不改变原来字符串;
#include<stdio.h>
#include<stdlib.h>
//StrDec即是输入又是输出
void CutSpace1(char* Res, char* Dec)
{
//int i = 0;
for (; *Res != '\0'; Res++) {
if (*Res != ' ')
*Dec++ = *Res;//'++' 优先级比 '*'高,但是这里'++'作为后缀,先进行*Dec,再自加
}
*Dec = '\0';
return;
}
int main() {
char StrRes[] = " hello moto! " ;
char StrDec[64] = "";
CutSpace1(StrRes, StrDec);
printf("%s\n", StrDec);
return 0;
}
2. int CutSpace2(char** StrRes,int* len)
在被调用函数中申请堆空间,在调用函数中也可以使用;
用二级指针作为形参,
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
/*char* CutSpace2(char* StrRes, int max)
{
int i = 0;
char* ptr = (char*)malloc(max*sizeof(char));
while(*StrRes)
{
if(*StrRes!= ' ')
ptr [i] = *StrRes;
StrRes++;
}
//使用数组的形式,而不是指针的形式,是为了方便得到数组首地址,方便显示赋值后的数组
ptr [i] = '\0';
return ptr ;
}
int main() {
char StrRes[] = " hello moto! " ;
int max = sizeof(StrRes) / sizeof(char);
printf("%s\n", CutSpace2(StrRes, max));
return 0;
}
*/
int CutSpace2(char** Res,int* len)
{
int i = 0;
int j = 0;
char* ptr = (char*)malloc(16*sizeof(char));
strcpy(ptr," hello motto!");
for(;ptr[i] != '\0';i++)
{
if(ptr[i] != ' ')
ptr[j++] = ptr[i];
}
ptr[j] = '\0';
*len = str(ptr);
*Res= ptr;//Res是二级指针,加'*'解引用得到一级指针,即字符串首地址,也就是StrRes; (char*)*Res = (char*)ptr;
return 0;
}
int main()
{
char *StrRes = NULL;
int len = 0;
CutSpace2(&StrRes ,&len);
printf("%s %d\n",StrRes ,len);
if(StrRes )
{
free(StrRes );
StrRes = NULL;
}
return 0;
}
3. void CutSpace3(char* StrRes)
在被调用函数中申请栈空间,存储传进来的调用函数的字符串地址,即复制了一份字符串在被调用函数栈空间中。
直接改变了原来的字符串。
#include<stdio.h>
#include<stdlib.h>
void CutSpace3(char* StrRes)
{
int i = 0;
char* ptr = StrRes;
while(*ptr)
{
if(*ptr != ' ')
StrRes[i++] = *ptr;//StrRes[i] 等价于 *(StrRes + i)
ptr++;
}
StrRes[i] = '\0';
return;
}
int main() {
char StrRes[] = " hello moto! " ;
CutSpace3(StrRes);
printf("%s\n", StrRes);
return 0;
}
4. void CutSpace4(char* StrRes)
直接修改调用函数申请的栈空间中的数据;
#include<stdio.h>
#include<stdlib.h>
void CutSpace3(char* StrRes)
{
int i = 0;
int j = 0;
for(;StrRes[i] != '\0';i++)
{
if(StrRes[i] != ' ')
StrRes[j++] = StrRes[i];
}
StrRes[j] = '\0';
return;
}
int main() {
char StrRes[] = " hello moto! " ;
CutSpace4(StrRes);
printf("%s\n", StrRes);
return 0;
}
参考文章:C语言——删除字符串中的空格