南开百题难题破解(1)

题目要求:

从左到右依次扫描字符串str,把小写字母o左边的所有字符移到该串的右边,并把该小写字母o删除,继续扫描字符串str并做上述操作,直到字符串str中所有的小写字母o被删除为止。

解答如下:

void StrOR(void)
{
	int i,j,k=0;//定义三个变量,i表示行数,j表示列数,k指向每一行的第一个字符
	int len;//用来存放每行的字符数
	char buf[80];//用来存放临时变换的行数据
	char a=0;//行数据存放到临时数组中时,用0字符清空该行数据
	for(i=0;i<maxline;i++)
	{
		len=strlen(xx[i]);//获得每行的字符数
		j=0;
		while(j<len)
		{
			if(xx[i][j]=='o')//判断该字符是否为o
			{
				xx[i][j]=0;//将字符o的位置用零替换,以便做字符串拷贝和连接时发挥作用,字符串连接函数和拷贝函数遇到零字符时将不再进行操作
				strcpy(buf,&xx[i][j+1]);
				/*
				strcpy函数:
				原型声明:extern char *strcpy(char dest[],const char *src);
				功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,连字符串结束标志也一起copy.
				说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
				返回指向dest的指针。
				*/
				strcat(buf,xx[i]);
				/*
				strcat函数:
				原型:extern char *strcat(char *strDest, char *strSrc);
				功能:把strSrc所指字符串添加到strDest结尾处(覆盖strDest结尾处的'\0')并添加'\0';
				说明:strSrc和strDest所指内存区域不可以重叠且strDest必须有足够的空间来容纳strSrc的字符串。
				返回指向strDest的指针.
				*/
				strset(xx[i],a);//将xx[i]该行数据清零,以便从临时数组中获得数据时不会发生错误
				strcpy(xx[i],buf);//将临时数组中的数据拷贝到xx的行数组中
				len = len-j;//拷贝后的数据中后j个字符不会包含字符o
				j=0;//将j置为0,对新的数据重新进行操作
			}
			else
			{
				j++;
			}
		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值