本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
第13題:
函數(shù)ReadDat()實現(xiàn)從文件in13.dat中讀取一篇英文文章存入字符串?dāng)?shù)組xx中;請編制函數(shù)StrOR(),其函數(shù)的功能是:以行為單位依次把字符串中所有小寫字母o左邊的字符串內(nèi)容移到該串的右邊存放,然后把小寫字母o刪除,余下的字符串內(nèi)容移到已處理字符串的左邊存放,之后把已處理的字符串仍按行重新存入字符串?dāng)?shù)組xx中。最后main()函數(shù)調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件out13.dat中。
例如:原文:you can create an index on any field.
you have the correct record.
結(jié)果:n any field.Yu can create an index
rd.yu have the correct rec
原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個字符,含標(biāo)點符號和空格。
注意:部分源程序已經(jīng)給出。
請勿改動主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include <stdio.h>
#include <string.h>
#include<conio.h>
char xx[50][80];
int maxline=0; &nbs
【答案】
void StrOR(void)
{
int i,j,k,index,strl;
char ch;
for(i=0;i<maxline;i++)
{ strl=strlen(xx[i]);
index=strl;
for(j=0;j<strl;j++)
if(xx[i][j]=='o')
{ for(k=j;k<strl-1;k++)
xx[i][k]=xx[i][k+1];
xx[i][strl-1]=' ';
index=j;
}
for(j=strl-1;j>=index;j--)
{ ch=xx[i][strl-1];
for(k=strl-1;k>0;k--)
xx[i][k]=xx[i][k-1];
xx[i][0]=ch;
}
}
}
【解析】
考點:(1)查找并刪除字符串中的指定字符;
(2)對字符串中的元素進行移位。
本題的解題思路是:以行為單位查找并刪除字母“o”,然后根據(jù)題意進行字符串的互換。實現(xiàn)字符串的互換時,把左邊字符串移到右邊,與把右邊字符串移到左邊其結(jié)果一樣,但是后者相對簡單,故本題采用后者。刪除字符“o”,可以通過找到每行中的字母“o”后,將“o”后面 的字母依次向前移一位,即可以把“o”刪除。把字符“o”右邊的字符串移到左邊,可以將最后一位字符移動到字符串的首部,并將其他的字符依次向后移一位,直到原來字母“o”所在位置上的字符也被移到字符串首部為止,確定原來字符“o”所在的位置,可以設(shè)定一個記錄字符“o”位置的變量。
程序的流程為:首先調(diào)用ReadDat()函數(shù)讀入數(shù)據(jù)并存放到數(shù)組xx中,通過StrOR()函數(shù)處理后,由WriteDat()函數(shù)寫回文件out13.dat中。
在StrOR()函數(shù)中,最外層for循環(huán)的作用是使下面的操作逐行進行,首先通過庫函數(shù)strlen()得到每行字符串的實際長度并賦給strl,循環(huán)到i=maxline,即訪問過所有行時結(jié)束,然后進入內(nèi)嵌的第二層for循環(huán),循環(huán)到j(luò)=strl,即訪問過本行的所有字符時結(jié)束,在循環(huán)體中,通過if語句依次判斷當(dāng)前元素是否為字符“o”,若是“o”則進入第三層循環(huán)體,在循環(huán)體中將字符“o”后面的元素依次向前移一位,此時字符“o”已經(jīng)被它后面的元素所取代,然后再把本行最后一個字符置空,此時j的值為字符“o”原來所在數(shù)組元素的下標(biāo),把i賦給index,即用index來標(biāo)記字符“o”原來所在的位置,當(dāng)k=strl-1,即“o”后面所有的字符都依次向前移動一位后,本層for循環(huán)結(jié)束。進入下一個for循環(huán),在以下程序中,先把數(shù)組中每行的最后一個元素賦給ch后,進入下一重循環(huán),將從index標(biāo)記的位置開始逐個向后移一位,并且把最后一位移到本行的開頭處,一直循環(huán)到index標(biāo)記的位置也被移到開頭處,函數(shù)結(jié)束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |