字符串的一些习题

一  设计函数将数字字符串转化为整形

#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值