問題
【問題描述】編寫程式将含有縮記符号的字元串擴充為等價的完整字元串,例如将a-d擴充為abcd。該程式可以處理大小寫字母和數字,并可以處理a-b-c、a-z0-9與-a-z等類似的情況。要求擴充符’-’兩邊的字元隻要右邊的大于左邊就擴充(即Z-b情況也要擴充),并且’-’兩邊不能有空格。
【輸入形式】從鍵盤輸入包含擴充符的字元串,字元串中可以包含空格
【輸出形式】輸出擴充後的字元串
【輸入樣例1】 a-c-u-B
【輸出樣例1】 abcdefghijklmnopqrstu-B
【輸入樣例2】 a-b-c a-a 0-4
【輸出樣例2】 abc a-a 01234
【樣例說明】擴充輸入a-c-u為:abcdefghijklmnopqrstu,而B比u值小,是以無法擴充,直接輸出。
算法分析
先将要擴充的字元串讀到一個字元數組(s1)中;
設另一個字元數組用于存放擴充後的字元串(s2);
依次檢查所讀入字元串(s1)中字元;
将s1[i]原封不動的寫到s2中;
當s1[i+1]==‘-’ && s1[i] < s1[i+2]時,
将s1[i]至s1[i+2]之間的字元展開到s2中
如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CO5QTNxQmM0Q2MiFjMjJzMzYzX1UzNycTM3IzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
算法實作
#include <stdio.h>
#define
int main()
{
char c,s1[MAXLINE],s2[MAXLINE];
int i,j;
i = j = 0;
gets(s1);
while(s1[i] != '\0'){
s2[j++] = s1[i];
if(s1[i+1] == '-' && s1[i] < s1[i+2]){
for(c = s1[i]+1; c < s1[i+2]; c++)
s2[j++] = c;
i = i+2;
}
else i++;
}
s2[j] = '\0';
puts(s2);
return 0;
}