fork(4) download
  1.  
  2. #include <functional>
  3. #include <iostream>
  4.  
  5. bool isVowel(unsigned char x)
  6. {
  7. static char vowelTest[] = {
  8. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  9. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  10. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  11. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  12. 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
  13. 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  14. 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
  15. 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  16. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  17. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  18. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  21. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  22. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  23. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  24.  
  25. return vowelTest[x];
  26. }
  27. bool isConst(unsigned char x)
  28. {
  29. return !isVowel(x);
  30. }
  31. char* findNext(char* data, std::function<bool(unsigned char)> test)
  32. {
  33. while(!test(*data))
  34. { ++data;
  35. }
  36. return data;
  37. }
  38. void rearange(char* str)
  39. {
  40. char* data[2] = { findNext(str, isConst), findNext(str, isVowel)};
  41. bool vowelNow = false;
  42.  
  43. while(*str)
  44. {
  45. if (data[vowelNow] == str)
  46. {
  47. data[vowelNow] = findNext(data[vowelNow]+1, isVowel);
  48. }
  49. else
  50. {
  51. std::swap(*data[0], *data[1]);
  52. data[0] = findNext(data[0]+1, isConst);
  53. data[1] = findNext(data[1]+1, isVowel);
  54. }
  55. ++str;
  56. vowelNow = !vowelNow;
  57. }
  58. }
  59.  
  60. int main()
  61. {
  62. char val[] = "abed";
  63. std::cout << val << "\n";
  64. rearange(val);
  65. std::cout << val << "\n";
  66. }
  67.  
Success #stdin #stdout 0s 3300KB
stdin
Standard input is empty
stdout
abed
bade