fork(4) download
  1. #include <iostream>
  2. #include <cctype>
  3.  
  4. //первый вариант
  5. const char* find_maxseq(const char* s, size_t& n, int (*cmp)(int)){
  6. size_t m;
  7. const char* p, *f = NULL;
  8. n = 0;
  9. while(*s){
  10. while(*s && !(*cmp)(*s))
  11. ++s;
  12. p = s;
  13. while(*p && (*cmp)(*p))
  14. ++p;
  15. m = (size_t)(p - s);
  16. if(m > n){
  17. n = m;
  18. f = s;
  19. }
  20. s = p;
  21. }
  22. return f;
  23. }
  24.  
  25. //второй вариант
  26. char* find_maxseq(char* s, int (*cmp)(int)){
  27. size_t m, n = 0;
  28. char* p, *f = NULL;
  29. while(*s){
  30. while(*s && !(*cmp)(*s))
  31. ++s;
  32. p = s;
  33. while(*p && (*cmp)(*p))
  34. ++p;
  35. m = (size_t)(p - s);
  36. if(m > n){
  37. n = m;
  38. f = s;
  39. }
  40. s = p;
  41. }
  42.  
  43. if(f != NULL)
  44. *(f + n) = '\0';
  45. return f;
  46. }
  47.  
  48. int main(void) {
  49. char s[] = "bla-bla(123456), bla123456789, 89 end9";
  50.  
  51. size_t n;
  52. const char* p = find_maxseq(s, n, &std::isdigit);
  53. if(p != NULL){
  54. std::cout.write(p, n);
  55. std::cout << std::endl;
  56. }
  57.  
  58. char* t = find_maxseq(s, &std::isdigit);
  59. if(t != NULL)
  60. std::cout << t << std::endl;
  61. return 0;
  62. }
  63.  
  64.  
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
123456789
123456789