一 设计函数将数字字符串转化为整形
#include<stdio.h>
#include<string.h>
int zhuanhua(char *p)
{
int tem=0;
int flag=0;
if(*p=='-')
{
flag=0;
p++;
}
else
{
flag=1;
}
while(*p!=0)
{
tem=tem*10+(*p-'0');
p++;
}
if(flag==0)
{
tem=-tem;
}
return tem;
}
int main()
{
char a[]="";
gets(a);
// scanf("%s",&a);
int b=zhuanhua(a);
char m[]="sada";
printf("%s\n",a);
printf("%d\n",b);
return 0;
}
二 删除字符串中的某个符号 如asdad,,faasf,,asd删除”,“并输出
#include<stdio.h>
int main()
{
char a[]="adsadad,,faf,,a,sa,";
char *p=a;
while(*p!=0)
{
char *q=p;
if(*q==',')
{
while(*q!=0)
{
*q=*(q+1);
q++; // 循环结束后 无法确定q指向的内容是是什么 可能仍是"," 即两个","连在一起 所以此时p不能向后走
}
}
else
p++;
}
printf("%s",a);
return 0;
}
当找到","开始如图操作 去除该","后面字符依次向前
由于不知道换完之后的
三 去除字符串中的"\0"
该题与上一题思路基本相同
但有一点需要注意
代码注释中会提到
#include<stdio.h>
#include<string.h>
int main()
{
char a[]="ada\0das\0\0dad";
int b=sizeof(a)/sizeof(a[0]);
char *p=a;
while(p!=&a[b-1])
{
char *q=p;
if(*q==0)
while(q!=&a[b-1])
{
*q=*(q+1);
q++;
}
else
p++;
if(q==&a[b-1])
b--; //当q==%a[b-1]说明已经有一个"\0"到达字符串末尾
//这样会导致末尾有多个"\0"
//此时 &a[b-1]之前出现存在在字符串末尾的"\0"
//当p指向真正末尾的"\0"其后面的"\0"会向前进1且p不会向后走这样的话末尾的多个"\0"无限循环交换位置
//但p永远不会到达&a[b-1]跳不出循环
//如果每当一个"\0"到达末尾让b-1这样相当于完整的删除这个"\0"只看他之前的字符串避免以上问题
}
printf("%s",a);
return 0;
}