powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не работает программа С++ Не как не могу понять
8 сообщений из 8, страница 1 из 1
Почему не работает программа С++ Не как не могу понять
    #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
Почему не работает программа С++ Не как не могу понять
    #38404499
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут по смыслу данного теста str.substr должен захватывать 2 символа но где-то косяк и захватывает больше.
...
Рейтинг: 0 / 0
Почему не работает программа С++ Не как не могу понять
    #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
Почему не работает программа С++ Не как не могу понять
    #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
Почему не работает программа С++ Не как не могу понять
    #38404569
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Так в substr и косяк. Автор думает что второй аргумент - индекс конца, а на самом деле это должна быть длина отрезка.
...
Рейтинг: 0 / 0
Почему не работает программа С++ Не как не могу понять
    #38404601
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное так оно и есть. Я просто не помню смысл аргументов string::substr.
...
Рейтинг: 0 / 0
Почему не работает программа С++ Не как не могу понять
    #38404607
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНаверное так оно и есть. Я просто не помню смысл аргументов string::substr.
После перехода с джавы я всегда путался, кучу багов на этом заработал. Там индекс, а тут длина :)
Скорее всего этот дурацкий интерфейс остался в stl от древней, до-stl версии string.
...
Рейтинг: 0 / 0
Почему не работает программа С++ Не как не могу понять
    #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
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не работает программа С++ Не как не могу понять
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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