題目要求: 從左到右依次掃描字符串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.2cto.com */ strset(xx[i],a);//將xx[i]該行數據清零,以便從臨時數組中獲得數據時不會發生錯誤 strcpy(xx[i],buf);//將臨時數組中的數據拷貝到xx的行數組中 len = len-j;//拷貝後的數據中後j個字符不會包含字符o j=0;//將j置為0,對新的數據重新進行操作 } else { j++; } } } }