Форум программистов, компьютерный форум CyberForum.ru

Странное поведение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Инициализация элементов массива в конструкторе http://www.cyberforum.ru/cpp-beginners/thread601847.html
Доброго времени суток! Подскажите пожалуйста можно ли инициализировать элементы массива при помощи списка инициализации в конструкторе класса. Если можно то какой синтаксис, а если нет то почему?
C++ Странные ошибки Здравствуйте! У меня есть такой код: class StringParser { private: char* str; char* seperators; int position; public: StringParser (char* newStr) { str = newStr; seperators = new char; http://www.cyberforum.ru/cpp-beginners/thread601846.html
C++ Ошибка при запуске программы (undefined reference to...)
Здравствуйте, пишу лабу по С++ и столкнулся с ошибкой при запуске данного кода, ошибка 248|undefined reference to `Podrazdelenie::scan()' #include <stdio.h> #include <tchar.h> #include "string.h" class Podrazdelenie; class Tirg_avtomat { protected: static int kolvo; static int nomer;
Сколько различных натуральных чисел можно составить из цифр 0, 1, 2, 3, 4, 5, C++
Сколько различных натуральных чисел можно составить из цифр 0, 1, 2, 3, 4, 5, если каждая цифра входит не более одного раза
C++ Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц http://www.cyberforum.ru/cpp-beginners/thread601826.html
Здравствуйте, не могу понять в чём может быть ошибка :) Решаю олимпиадную задачу. Но система находит в тесте 5 не верный ответ) В единственной строке входного файла INPUT.TXT записана последовательность нулей и единиц (без пробелов). Суммарное количество цифр не превышает 100. В единственную строку выходного файла OUTPUT.TXT нужно вывести искомую длину цепочки нулей. #include <stdio.h>
C++ Не могу найти ошибку #include <iostream> #include <cmath> #define N = 3 using namespace std; void vvodMatr(int a, int n) int poiskMax (int a, int n) void perestanovka(int a, int n) void print(int a, int n) int main() { подробнее

Показать сообщение отдельно
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
10.06.2012, 11:35     Странное поведение
Здравствуйте еще раз Теперь возникла другая непонятка. Есть класс StringParser, объекты которого умеют разбивать строку на подстроки, разделенные запятыми. Всякий раз, когда вы вызываете метод .getNextPart(), он возвращает вам следующую подстроку. Описывается класс StringParser в файле StringParser.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using namespace std;
 
class StringParser {
    private:
        char *str, *seperators;
        int position;
        bool isSeperator(int seperatorPosition) {
            for (int i = 0; seperators[i] != '\0'; i++) {
                if (str[seperatorPosition] == seperators[i])
                    return true;
            }
 
            return false;
        }
    public:
        StringParser (char* newStr) {
            str = newStr;
            seperators = new char[1];
            seperators[0] = ',';
            position = 0;
        }
        char* getNextPart () {
            int partLength = 0;
            while (!isSeperator(position+partLength) and str[position+partLength] != '\0') {
                partLength++;
            }
 
            char* part = new char[partLength+1];
            for (int i = 0; i < partLength; i++) {
                part[i] = str[position+i];
            }
            part[partLength] = '\0';
 
            position += partLength+1;
 
            return part;
        }
};
Сам класс работает, вроде, исправно, однако есть одна странность.
Когда я пишу в главном файле программы так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include "StringParser.h"
using namespace std;
 
int main () {
    StringParser parser("1, 2, 3");
    cout << parser.getNextPart();
    cout << parser.getNextPart();
    cout << parser.getNextPart();
 
    return 0;
}
то все работает, как надо, на экран выводится "1 2 3" (пробелы parser не пропускает, т. к. они не являются разделителями, разделителем является только запятая).
Но когда я пишу так:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "StringParser.h"
using namespace std;
 
int main () {
    StringParser parser("1, 2, 3");
    cout << parser.getNextPart() << parser.getNextPart() << parser.getNextPart();
 
    return 0;
}
то на экран выводится " 3 21", т. е. все выводится в обратном порядке. Почему так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru