当前位置:编程学习 > C/C++ >>

南开百题难题破解(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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,