




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
例題講解:
C語言高級編程
(字符串例題)北京大學(xué)
信息科學(xué)技術(shù)學(xué)院2012年12月例題:字符串排序例題:字符串排序問題描述參考整數(shù)排序方法,設(shè)計一種為字符串排序的算法,將字符串從小到大輸出。關(guān)于輸入第一行為測試數(shù)據(jù)組數(shù)t,后面跟著t組數(shù)據(jù)。每組數(shù)據(jù)第一行是n,表示這組數(shù)據(jù)有n行字符串,接下來是要排序的n行字符串。每行字符串的字符個數(shù)不會大于200,n<100。關(guān)于輸出對于每組數(shù)據(jù),輸出排好序的字符串,每組輸出后要多輸出一個空行。例題:字符串排序例子輸入22HelloWorld4ILoveCLanguage!例子輸出HelloWorldCILanguage!Love#include<stdio.h>#include<string.h>
intmain(){ chartable[100][200]; chartemp[200]; intn,t,i,j; scanf("%d",&t); while(t--){ scanf("%d",&n); scanf("\n");//作用是什么?答:使gets能讀取下一行 for(i=0;i<n;i++){ gets(table[i]); }
...//排序并輸出排序結(jié)果,見下頁 printf("\n"); } return0;}for(i=0;i<n;i++){ for(j=1;j<n-i;j++){ if(strcmp(table[j-1],table[j])>0){ strcpy(temp,table[j-1]); strcpy(table[j-1],table[j]); strcpy(table[j],temp); } }}for(i=0;i<n;i++){ printf(“%s\n”,table[i]);}例題:合法C標(biāo)識符
例題:合法C標(biāo)識符
問題描述給定n個不包含空白符的字符串,請判斷它們是否是C語言合法的標(biāo)識符號(注:這些字符串一定不是C語言的關(guān)鍵字)。關(guān)于輸入第一行為整數(shù)n,其后n行每行一個字符串,字符串中不包含任何空白字符,且長度不大于20。關(guān)于輸出對應(yīng)于每個字符串,如果它是C語言的合法標(biāo)識符,則輸出yes,否則輸出no
。例題:合法C標(biāo)識符
例子輸入6GUE9NF1IccGB8nd97F3RKPEGX9R;TWyYcpiefZIko1s}zy9XBgsapOF36Lv5BYPeLPJ3vV`2[h例子輸出yesyesnonoyesno#include<stdio.h>#defineMAX20/*最大標(biāo)識符長度*/intmain(){inti,j,n;/*循環(huán)相關(guān)變量*/chars[MAX+1];/*定義字符數(shù)組*/scanf("%d",&n);/*讀入待檢查標(biāo)識符的個數(shù)n*/for(i=0;i<n;i++){/*循環(huán)n次*/scanf("%s",s);/*讀入一個待檢查標(biāo)識符字符串*/for(j=0;s[j];j++){/*遍歷字符串中的每個字符*/if(!((s[j]=='_')||/*下劃線“_”*/(s[j]>='A'&&s[j]<='Z')||/*大寫字母*/(s[j]>='a'&&s[j]<='z')||/*小寫字母*/(s[j]>='0'&&s[j]<='9'&&j>0)))/*非首字符數(shù)字*/break;/*遇到任何非法字符中斷循環(huán)*/}printf(s[j]?"no\n","yes\n");/*s[j]:break中斷循環(huán)*/
}return0;}例題:首字母大寫例題:首字母大寫問題描述對一個字符串中的所有單詞,如果單詞的首字母不是大寫字母,則把單詞的首字母變成大寫字母。在字符串中,單詞之間通過空白符分隔,空白符包括:空格('')、制表符('\t')、回車符('\r')、換行符('\n’)。關(guān)于輸入輸入一行:待處理的字符串(長度小于80)。關(guān)于輸出輸出一行:轉(zhuǎn)換后的字符串。提示由于輸入字符串中有空格,因此應(yīng)該用gets函數(shù)把一行字符串讀入到字符數(shù)組s中。可用printf("%s\n",s)輸出字符串s。例題:首字母大寫例子輸入ifso,youalreadyhaveagoogleaccount.youcansigninontheright.
例子輸出IfSo,YouAlreadyHaveAGoogleAccount.YouCanSignInOnTheRight.
#include<stdio.h>#defineMAX80/*最大字符串長度*/intmain(){chars[MAX+1];/*字符數(shù)組*/inti;/*循環(huán)變量*/gets(s);/*讀入一行字符串*/for(i=0;s[i];i++){/*遍歷每個字符*//*判斷s[i]是否為單詞首字母,因?yàn)榇嬖凇安紶柋磉_(dá)式短路”
規(guī)則,所以先判斷i==0是安全的*/if(i==0||s[i-1]==''||s[i-1]=='\t'){if(s[i]>='a'&&s[i]<='z'){/*首字母小寫?*/s[i]=s[i]-'a'+'A';/*把小寫字符轉(zhuǎn)換為大寫*/}}}puts(s);/*輸出轉(zhuǎn)換后的字符串*/
return0;}例題:密碼翻譯例題:密碼翻譯問題描述在情報傳遞過程中,為了防止情報被截獲,往往需要對情報用一定的方式加密,簡單的加密算法雖然不足以完全避免情報被破譯,但仍然能防止情報被輕易的識別。我們給出一種最簡的加密方法,對給定的一個字符串,把其中從a~y,A~Y的字母用其后繼字母替代,把z和Z用a和A替代,則可得到一個簡單的加密字符串。關(guān)于輸入第一行是字符串的數(shù)目n,(也用gets(s)讀取字符串,再用
n=atoi(s)獲得整數(shù)數(shù)值)。其余n行每行一個字符串,用gets(s)方式讀取這一行字符串。每個字符串長度小于80個字符。關(guān)于輸出輸出每行字符串的加密字符串。例題:密碼翻譯例子輸入1Hello!Howareyou!例子輸出Ifmmp!Ipxbsfzpv!#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMAX80/*最大字符串長度*/intmain(){charstr[MAX+1];/*字符數(shù)組*/intn,i,j,len;/*循環(huán)相關(guān)變量*/
gets(str);/*讀取第一個整數(shù)的字符串形式*/n=atoi(str);/*把字符串轉(zhuǎn)換為整數(shù)值*/
for(i=0;i<n;i++){/*循環(huán)n次*/gets(str);/*每次讀取一行待加密字符串*/.../*密碼翻譯,見下頁*/puts(str);/*輸出加密后的字符串*/}
return0;}len=strlen(str);/*求字符串的長度*/for(j=0;j<len;j++){/*用字符串長度控制遍歷每個字符*/if((str[j]>='a'&&str[j]<='y')||(str[j]>='A'&&str[j]<='Y')){str[j]=str[j]+1;/*把這些字符替換為其后繼字符*/}elseif(str[j]=='z'){str[j]='a';/*把z替換為a*/}elseif(str[j]=='Z'){str[j]='A';/*把Z替換為A*/}}例題:數(shù)制轉(zhuǎn)換例題:數(shù)制轉(zhuǎn)換問題描述求任意兩個不同進(jìn)制非負(fù)整數(shù)的轉(zhuǎn)換(二進(jìn)制~三十六進(jìn)制),所給整數(shù)在int所能表達(dá)的范圍之內(nèi)。不同進(jìn)制的表示符號為(0,1,…,9,a,b,…,z)或者(0,1,…,9,A,B,…,Z)。關(guān)于輸入輸入只有一行,包含三個整數(shù)a、n、b。a表示其后的n是a進(jìn)制整數(shù),b表示欲將a進(jìn)制整數(shù)n轉(zhuǎn)換成b進(jìn)制整數(shù)。a和b本身都是十進(jìn)制整數(shù),2≤a,b≤36
關(guān)于輸出輸出包含一行,該行有一個整數(shù)為轉(zhuǎn)換后的b進(jìn)制數(shù)。輸出時字母符號全部用大寫表示,即(0,1,…,9,A,B,…,Z)。例題:數(shù)制轉(zhuǎn)換例子輸入15Aab37
例子輸出210306#include<stdio.h>#defineMAX80/*long型整數(shù)的任何進(jìn)制數(shù)的長度都不比它大*/intmain(){/*字符到數(shù)值的映射表,初始化為全0,待后面程序賦值*/inta2i[128]={0};/*數(shù)值到字符的映射表,用字符串的形式初始化數(shù)組*/chari2a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";charin[MAX],out[MAX]="0";inti,from,to,len=0;longnum=0;/*初始化a2i表*/for(i='0';i<='9';i++){a2i[i]=i-'0';}for(i='A';i<='Z';i++){a2i[i]=i-'A'+10;}for(i='a';i<='z';i++){a2i[i]=i-'a'+10;}
/*按照指定的進(jìn)制將數(shù)字讀入,并放在變量num中*/scanf("%d%s%d",&from,in,&to);for(i=0;in[i]!='\0';i++){num=num*from+a2i[in[i]];}
/*數(shù)字已經(jīng)在num中,現(xiàn)在按照指定的進(jìn)制輸出它*/len=(num==0)?1:0;while(num>0){out[len++]=i2a[num%to];num/=to;}
/*逆序輸出,高位下標(biāo)大,但要先輸出*/for(i=len-1;i>=0;i--){printf("%c",out[i]);}
return0;}例題:文字排版例題:文字排版問題描述給一段英文短文,單詞之間以空格分隔(單詞包括其前后緊鄰的標(biāo)點(diǎn)符號)。請按照每行不超過80個字符,每個單詞居于同一行上的原則對短文進(jìn)行排版,在同一行的單詞之間以一個空格分隔,行首和行尾都沒有空格。關(guān)于輸入第一行是一個整數(shù),表示英文短文中單詞的數(shù)目。其后是n個以空格分隔的英文單詞(單詞包括其前后緊鄰的標(biāo)點(diǎn)符號,且每個單詞長度都不大于40個字母)。關(guān)于輸出排版后的多行文本,每行文本字符數(shù)最多80個字符,單詞之間以一個空格分隔,每行文本首尾都沒有空格。例題:文字排版例子輸入84Oneswelteringday,Iwasscoopingicecreamintoconesandtoldmyfourchildrentheycould"buy"aconefrommeforahug.Almostimmediately,thekidslineduptomaketheirpurchases.Thethreeyoungesteachgavemeaquickhug,grabbedtheirconesandracedbackoutside.Butwhenmyteenagesonattheendofthelinefinallygothisturnto"buy"hisicecream,hegavemetwohugs."Keepthechanges,"hesaidwithasmile.例子輸出Oneswelteringday,Iwasscoopingicecreamintoconesandtoldmyfourchildrentheycould"buy"aconefrommeforahug.Almostimmediately,thekidslineduptomaketheirpurchases.Thethreeyoungesteachgavemeaquickhug,grabbedtheirconesandracedbackoutside.Butwhenmyteenagesonattheendofthelinefinallygothisturnto"buy"hisicecream,hegavemetwohugs."Keepthechanges,"hesaidwithasmile.
例題:文字排版,I
OneendLINE...,I
wasOneendLINEend...,I
wasOneendLINE...例題:文字排版,IwasbeiOneng,I
wasOneendLINE...endLINEend,IwasOneLINEbeingend.........#include<stdio.h>#include<string.h>
#defineMAX40/*最大單詞長度*/#defineLINE80/*一行的寬度*/
intmain(){inti,n,len;/*循環(huán)相關(guān)變量*/intend=0;/*下一個單詞(或空格)輸出的位置*/charword[MAX+1];/*單詞字符數(shù)組*/
scanf("%d",&n);/*讀入單詞數(shù)目n*/for(i=0;i<n;i++){/*循環(huán)n次*/scanf("%s",word);/*每次讀入一個單詞*/
.../*確定如何輸出,見下一頁*/
}
return0;}for(i=0;i<n;i++){/*循環(huán)n次*/scanf(“%s”,word);/*每次讀入一個單詞*/len=strlen(word);/*求得單詞字符串的長度*//*在當(dāng)前行上,再輸出一個單詞(包括前面的空格)后是否超限*/if(end+len+1>LINE){printf("\n");/*超出LINE個字符限制時,換行*/end=0;/*下一個單詞輸出的位置歸0*/}elseif(i>0){/*第一個單詞前不加空格*/printf("");/*其余單詞前要加空格*/end++;/*更新到下一個單詞輸出的位置*/}printf("%s",word);/*輸出單詞*/end+=len;/*更新到下一個空格輸出的位置*/}例題:單詞替換例題:單詞替換問題描述輸入一個字符串,以回車結(jié)束(字符串長度≤100)。該字符串由若干個單詞組成,單詞之間用一個空格隔開,所有單詞區(qū)分大小寫。現(xiàn)需要將其中的某個單詞替換成另一個單詞,并輸出替換之后的字符串。關(guān)于輸入輸入包括3行:第1行是包含多個單詞的字符串s。第2行是待替換的單詞a(長度≤100)。第3行是a將被替換的單詞b(長度≤100)。注:s、a、b
最前面和最后面都沒有空格。關(guān)于輸出輸出只有1行:將s中所有單詞a替換成b之后的字符串。如果s中單詞a沒有出現(xiàn),則將s原樣輸出。例題:單詞替換例子輸入YouwantsomeonetohelpyouYouI例子輸出Iwantsomeonetohelpyou例題:單詞替換Youwantsomeonetohelpyou\0You\0want\0someone\0to\0help\0you\0strstrs例題:單詞替換You\0want\0someone\0to
help
you\0strspYou\0want\0someone\0to
help
you\0strpYou\0want\0someone
to
help
you\0strspp=strchr(s,'')s例題:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠區(qū)道路橫平豎直施工方案
- 湖南舊鋼煙囪防腐施工方案
- 帶視頻的數(shù)學(xué)試卷
- 電纜線下作業(yè)施工方案
- 杭州日式屋頂花園施工方案
- 數(shù)控加工工藝與編程技術(shù)基礎(chǔ) 教案 模塊二 項(xiàng)目三 自動編程(3-4)
- 智能制造與傳統(tǒng)制造的區(qū)別
- 石油化工靜電接地的接地網(wǎng)設(shè)計
- 健全公共衛(wèi)生體系的策略及實(shí)施路徑
- 環(huán)保與可持續(xù)發(fā)展在新型城鎮(zhèn)化中的作用
- 生豬行業(yè)pest分析
- 2024內(nèi)蒙古烏審旗圖克鎮(zhèn)圖克工業(yè)園區(qū)中天合創(chuàng)化工分公司招聘20人高頻考題難、易錯點(diǎn)模擬試題(共500題)附帶答案詳解
- 五年級上冊小數(shù)乘除練習(xí)300道及答案
- 《新概念英語第二冊》電子書、單詞、筆記、練習(xí)冊(附答案)匯編
- 學(xué)校心理健康教育的目標(biāo)體系課件
- 控制加班改善對策培訓(xùn)課件
- 功能材料-智能材料
- 《信息科技》學(xué)科新課標(biāo)《義務(wù)教育信息科技課程標(biāo)準(zhǔn)(2022年版)》
- 合同智能審核與風(fēng)險預(yù)警
- 2024年中興通訊股份有限公司招聘筆試參考題庫含答案解析
- 中醫(yī)跟師總結(jié)論文3000字(通用3篇)
評論
0/150
提交評論