Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void expand(char s1[], char s2[]);
- main()
- {
- int c;
- int i = 0;
- char s1[MAXARRAYSIZE];
- char s2[MAXARRAYSIZE];
- while ((c = getchar()) != EOF)
- s1[i++] = c;
- s1[i] = '\0';
- expand(s1, s2);
- printf("%s", s2);
- }
- void expand(char s1[], char s2[])
- {
- int INALETTEREXPANSION = NO;
- int INANUMBEREXPANSION = NO;
- int i = 0;
- int k;
- int j = 0;
- int nc = 0;
- int valk;
- int vali;
- int inc;
- while (s1[i] != '\0')
- {
- switch (s1[i])
- {
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- if (!INALETTEREXPANSION)
- {
- s2[j++] = s1[i];
- INALETTEREXPANSION = YES;
- }
- k = i + 1;
- nc = 1;
- while (!isalnum(s1[k]) && s1[k] != '-')
- nc++, k++;
- if (isdigit(s1[k]))
- {
- INALETTEREXPANSION = NO;
- i++;
- }
- else if (s1[k] == '-')
- {
- nc++, k++;
- while (!isalnum(s1[k]))
- nc++, k++;
- if (isalpha(s1[k]) && s1[k] > s1[i])
- {
- valk = s1[k];
- vali = s1[i];
- inc = 1;
- while (valk-- > vali)
- {
- s2[j++] = s1[i] + inc++;
- }
- i += nc;
- INALETTEREXPANSION = YES;
- }
- else if (isalpha(s1[k]) && s1[k] < s1[i])
- {
- valk = s1[k];
- vali = s1[i];
- inc = 1;
- while (valk++ < vali)
- {
- s2[j++] = s1[i] - inc++;
- }
- i += nc;
- INALETTEREXPANSION = YES;
- }
- else if (isalpha(s1[k]) && s1[k] == s1[i])
- {
- s2[j++] = s1[i];
- i += nc;
- }
- else
- {
- s2[j++] = '-';
- i += nc;
- INALETTEREXPANSION = NO;
- }
- }
- else if (isalpha(s1[k]))
- {
- INALETTEREXPANSION = NO;
- i += nc;
- }
- break;
- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
- if (!INANUMBEREXPANSION)
- {
- s2[j++] = s1[i];
- INANUMBEREXPANSION = YES;
- }
- k = i + 1;
- nc = 1;
- while (!isalnum(s1[k]) && s1[k] != '-')
- nc++, k++;
- if (isalpha(s1[k]))
- {
- INANUMBEREXPANSION = NO;
- i++;
- }
- else if (s1[k] == '-')
- {
- nc++, k++;
- while (!isalnum(s1[k]))
- nc++, k++;
- if (isdigit(s1[k]) && s1[k] > s1[i])
- {
- valk = s1[k];
- vali = s1[i];
- inc = 1;
- while (valk-- > vali)
- {
- s2[j++] = s1[i] + inc++;
- }
- i += nc;
- INALETTEREXPANSION = YES;
- }
- else if (isdigit(s1[k]) && s1[k] < s1[i])
- {
- valk = s1[k];
- vali = s1[i];
- inc = 1;
- while (valk++ < vali)
- {
- s2[j++] = s1[i] - inc++;
- }
- i += nc;
- INALETTEREXPANSION = YES;
- }
- else if (isdigit(s1[k]) && s1[k] == s1[i])
- {
- s2[j++] = s1[i];
- i += nc;
- }
- else
- {
- s2[j++] = '-';
- i += nc;
- INALETTEREXPANSION = NO;
- }
- }
- else if (isalpha(s1[k]))
- {
- INANUMBEREXPANSION = NO;
- i += nc;
- }
- break;
- default:
- s2[j++] = s1[i++];
- break;
- }
- }
- s2[j] = '\0';
- }
Advertisement
Add Comment
Please, Sign In to add comment