藍橋杯-串的處理
串的處理
1. 把每個單詞的首字母變為大寫。
2. 把數字與字母之間用下劃線字元(_)分開,使得更清晰
3. 把單詞中間有多個空格的調整為1個空格。
例如:
使用者輸入:
you and me what cpp2005program
則程式輸出:
You And Me What Cpp_2005_program
使用者輸入:
this is a 99cat
則程式輸出:
This Is A 99_cat
我們假設:使用者輸入的串中只有小寫字母,空格和數字,不含其它的字母或符號。每個單詞間由1個或多個空格分隔。
假設使用者輸入的串長度不超過200個字元。
解題思路:
先一次性讀取原始串,用一個新的串表示處理過原始串後的字串。
按照空格將原始串分割成子串,再按照轉換規則分別處理子串,將處理後的子串新增到新的串中。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char s[200],ss[200],str[200];//原始讀入串、按空格分離的子串、原始串按要求處理後的串
int k=0;
bool isLatter(char c)//字母判斷
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return true;
else return false;
}
bool isNumber(char c)//數字判斷
{
if(c>='0'&&c<='9')
return true;
else return false;
}
void solve(char ss[])//處理串
{
for(int i=0; i<strlen(ss); ++i)
{
if(isLatter(ss[i]))//是字母
{
if(isNumber(ss[i-1])) str[k++]='_';//字母前面是數字要先加下劃線
if(i==0) str[k++]= toupper(ss[i]);//首字母大寫
else str[k++]=ss[i];
}
else if(isNumber(ss[i]))//是數字
{
if(isLatter(ss[i-1])) str[k++]='_';//數字前面是數字要先加下劃線
str[k++]=ss[i];
}
}
}
int main()
{
gets(s);//讀取含空格的整個串
int j=0;
bool flag=true;//標識是否處理過當前串
for(int i=0; i<strlen(s); ++i)
{
if(int(s[i])!=32)//不是空格
{
flag=true;
ss[j++]=s[i];//當前字元加到串中
if(i==strlen(s)-1) solve(ss);//到達串尾,處理當前串
}
else
{
if(flag)
{
flag=false;
solve(ss);//處理當前串
str[k++]=' ';//一個空格分隔
memset(ss,'\0',sizeof(ss));//清空字元陣列
}
j=0;
}
}
cout<<str<<endl;
return 0;
}
/*
you and me what cpp2005program
this is a 99cat
*/
相關文章
- 藍橋杯 航班時間 (字串處理)C字串
- 藍橋杯-從串中取三個不同字元字元
- 藍橋杯 排序排序
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯——查詢的妙趣
- 藍橋杯_演算法提高_身份證升級(簡單字元處理)演算法字元
- 藍橋杯年號字串字串
- 藍橋杯-帶分數
- 藍橋杯-翻硬幣
- 藍橋杯-螞蟻感冒
- 藍橋杯 計算方程
- 藍橋杯-座次問題
- 藍橋杯-長草(BFS)
- 藍橋杯-日期問題
- 藍橋杯-班級活動
- 藍橋杯-買不到的數目
- 密碼脫落——藍橋杯密碼
- 藍橋杯-回形巢狀巢狀
- 藍橋杯-分巧克力
- 藍橋杯-k倍區間
- 藍橋杯學習路線
- 藍橋杯javaB組備賽Java
- 太陽(藍橋杯14屆)
- 藍橋杯-走迷宮(BFS)
- 藍橋杯-地宮取寶
- 藍橋杯-波動數列
- 藍橋杯-日誌統計
- 藍橋杯-合併數列
- 藍橋杯-矩陣翻硬幣矩陣
- 藍橋杯—演算法訓練演算法
- 藍橋杯--演算法訓練演算法
- 藍橋杯大賽——驅動程式
- 藍橋杯 分巧克力(Java)Java
- 藍橋杯4-R格式-2
- 藍橋杯-axf檔案生成01
- 藍橋杯模板(三)python組Python
- 藍橋杯模板(二)python組Python