1. C++ / Говнокод #3237

    +984

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    string s;
    
    cout << "input words order:" << endl;
    getline(cin, s);
    
    int pos=0;
    while (true)
    {
    	pos=s.find(" ", pos+1);
    	if (pos==string::npos)
    		break;
    	num++;
    }
    num++;
    
    string words[num];
    pos=0;
    for (int i=0; i<num; i++)
    {
    	pos=s.find(" ");
    	if (pos==string::npos)
    	{
    		words[i]=s;
    		break;
    	}
    	words[i]=s.substr(0, pos);
    	pos++;
    	s=s.erase(0, pos);
    }

    очередной ночной опус. что? токенайзеры и вектора? ночь же..

    Запостил: ilardm, 16 Мая 2010

    Комментарии (11) RSS

    • string words[num]; //num != const
      что за компилятор?
      Ответить
      • да, забыл объявление num написать. оно раньше в файле было
        gcc
        Ответить
        • Тут дело не в объявление num. А в том, что это не константа. Стало быть массив words объявить нельзя так как он объявлен здесь.
          Ответить
          • чо? т.е. gcc проглотил, а другие не будут?
            оно в MSVC ругается?
            Ответить
          • В C99 уже можно (6.7.5.2).
            За C++ не знаю.
            Ответить
          • Хм-м ... GCC действительно съел :))
            http://en.wikipedia.org/wiki/Variable-length_array
            А вот VS 2008 нет.
            Ответить
    • Все нормально выделяет в рантайме массивы на стеке.
      Ответить

    Добавить комментарий