天天看點

拓展字元

問題

【問題描述】編寫程式将含有縮記符号的字元串擴充為等價的完整字元串,例如将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中

如下圖:

拓展字元

算法實作

#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;
}      

繼續閱讀