Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не работает программа С++ Не как не могу понять / 8 сообщений из 8, страница 1 из 1
23.09.2013, 10:01
    #38404349
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
Код: plaintext
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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
#include <iostream>
#include <locale>
#include <string>

    using namespace std;

const int string_count = 3;

/* Функция должна разделять строку на элементы. Пример 11 22 33 44. 
вывод :
11
22
33
44

А выводит 
11
22 33
33 44
44
*/
string alg_string_empty(string str)
{
	string::size_type find_end   = 0;
	string::size_type find_begin = 0;

	string string_new;

	int shift = 0;

	    do {
			
			find_begin = find_end;			  
			
			find_end   = str.find(" ", find_end+1);

			string_new = str.substr( find_begin + shift, find_end );

			cout<<string_new<<endl;
			

          // shift = 1;

		}while(find_end != str.npos);

	return "";
}

void main()
{
	setlocale(LC_ALL, "Russian");

	string string_current;


			getline(cin, string_current);
				alg_string_empty( string_current );


	cin.get();
}
...
Рейтинг: 0 / 0
23.09.2013, 12:03
    #38404499
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
Тут по смыслу данного теста str.substr должен захватывать 2 символа но где-то косяк и захватывает больше.
...
Рейтинг: 0 / 0
23.09.2013, 12:21
    #38404523
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
Код: plaintext
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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
#include <iostream>
#include <locale>
#include <string>

    using namespace std;
/* Функция должна разделять строку на элементы. Пример 11 22 33 44.
вывод :
11
22
33
44

А выводит
11
22 33
33 44
44
*/
string alg_string_empty(string str)
{
    string::size_type find_end   = 0;
    string::size_type find_begin = 0;

    string string_new;
    static const char *separator = " ";
    static const int separatorLength = 1;

        do {

            find_begin = find_end;

            find_end = str.find(separator, find_end);

            string_new = str.substr( find_begin, find_end - find_begin);
            find_end+=separatorLength;
            cout<<string_new<<endl;


          // shift = 1;

    }while((find_end > 0) && (find_end < str.npos));

    return "";
}

int main()
{
    setlocale(LC_ALL, "Russian");

    string string_current;


            getline(cin, string_current);
                alg_string_empty( string_current );


    cin.get();
    return 0;
}
...
Рейтинг: 0 / 0
23.09.2013, 12:54
    #38404558
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
Точнее даже так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
string alg_string_empty(string str)
{    

    string string_new;
    static const char *separator = "$$";
    static const int separatorLength = 2;
    string::size_type find_end   = 0 - separatorLength;
    string::size_type find_begin = 0;

        do {
            find_end+=separatorLength;
            find_begin = find_end;

            find_end = str.find(separator, find_end);

            string_new = str.substr( find_begin, find_end - find_begin);            
            cout<<string_new<<endl;

    }while(find_end < str.npos);

    return "";
}
...
Рейтинг: 0 / 0
23.09.2013, 13:03
    #38404569
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
mayton,

Так в substr и косяк. Автор думает что второй аргумент - индекс конца, а на самом деле это должна быть длина отрезка.
...
Рейтинг: 0 / 0
23.09.2013, 13:21
    #38404601
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
Наверное так оно и есть. Я просто не помню смысл аргументов string::substr.
...
Рейтинг: 0 / 0
23.09.2013, 13:25
    #38404607
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
maytonНаверное так оно и есть. Я просто не помню смысл аргументов string::substr.
После перехода с джавы я всегда путался, кучу багов на этом заработал. Там индекс, а тут длина :)
Скорее всего этот дурацкий интерфейс остался в stl от древней, до-stl версии string.
...
Рейтинг: 0 / 0
23.09.2013, 14:25
    #38404696
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает программа С++ Не как не могу понять
Код: plaintext
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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
#include <iostream>
#include <locale>
#include <string>

    using namespace std;

const int string_count = 3;

/* Функция должна разделять строку на элементы. Пример 11 22 33 44. 
вывод :
11
22
33
44

А выводит 
11
22 33
33 44
44
*/
string alg_string_empty(string str)
{
	string::size_type find_end   = 0;
	string::size_type find_begin = 0;

	string string_new;

	int shift = 0; // зачем shift, если он всё время равен 0 ?

	    do {
			
			find_begin = find_end;			  
			
			find_end   = str.find(" ", find_end+1);  // тут хорошо бы проверять, что что-то нашлось вообще.

			string_new = str.substr( find_begin + shift, find_end );

			cout<<string_new<<endl;
			

          // shift = 1;

		}while(find_end != str.npos);

	return "";
}

void main()
{
	setlocale(LC_ALL, "Russian");

	string string_current;


			getline(cin, string_current);
				alg_string_empty( string_current );


	cin.get();
}

[/quot]
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не работает программа С++ Не как не могу понять / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]