南开百题难题破解(1)
题目要求:
从左到右依次扫描字符串str,把小写字母o左边的所有字符移到该串的右边,并把该小写字母o删除,继续扫描字符串str并做上述操作,直到字符串str中所有的小写字母o被删除为止。
解答如下:
[cpp]
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的指针. www.zzzyk.com
*/
strset(xx[i],a);//将xx[i]该行数据清零,以便从临时数组中获得数据时不会发生错误
strcpy(xx[i],buf);//将临时数组中的数据拷贝到xx的行数组中
len = len-j;//拷贝后的数据中后j个字符不会包含字符o
j=0;//将j置为0,对新的数据重新进行操作
}
else
{
j++;
}
}
}
}
补充:软件开发 , C++ ,