powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ..хм... а КАК? ...можно обрезать строку?
14 сообщений из 39, страница 2 из 2
..хм... а КАК? ...можно обрезать строку?
    #33231531
Фотография Анн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так:

char *p;

p = ((char*)strchr(str,'символ'));

if( p != 0) ((char*)strchr(str,'символ'))[0] = 0;
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231593
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АннМожно так:

char *p;

p = ((char*)strchr(str,'символ'));


if( p != 0) ((char*)strchr(str,'символ'))[0] = 0;
Тогда уж так наверное:
Код: plaintext
1.
 if (p) *p= 0 ;
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231629
Фотография Анн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно так:
...
if(p) p[0] = 0;
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231787
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АннА можно так:
...
if(p) p[0] = 0;
Можно, но так обычно пишут паскалисты, а не крутые C-шные парни :).
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231796
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше так:

Код: plaintext
1.
for(;*p;p++) { if (*p=='символ') *(p--)= 0 ;}

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231934
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабаслучше так:

Код: plaintext
1.
for(;*p;p++) { if (*p=='символ') *(p--)= 0 ;}
Posted via ActualForum NNTP Server 1.3
Типа предполагается что p=str и p!=NULL? Ну тогда я б предпочел так:
Код: plaintext
1.
 while (*p && *p!='символ') p++; *p= 0 ;

:)
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231940
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно посмотреть, во что превратит компилятор тот и другой вариант
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33231983
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас БарабасИнтересно посмотреть, во что превратит компилятор тот и другой вариант
Posted via ActualForum NNTP Server 1.3
Практически то же самое, но у тебя один лишний декремент, поэтому на моем компиляторе (gcc 3.3.5) мой вариант на 16 байт короче :)
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33232036
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
	jmp       short @ 3 
@ 2 :
	mov       eax,dword ptr [ebp+ 8 ]
	mov       dl,byte ptr [eax]
	cmp       dl,byte ptr [ebp+ 12 ]
	jne       short @ 4 
	mov       ecx,dword ptr [ebp+ 8 ]
	mov       byte ptr [ecx], 0 
	dec       dword ptr [ebp+ 8 ]
@ 4 :
@ 5 :
	inc       dword ptr [ebp+ 8 ]
@ 3 :
	mov       eax,dword ptr [ebp+ 8 ]
	cmp       byte ptr [eax], 0 
	jne       short @ 2 
@ 6 :
	ret 




	jmp       short @ 9 
@ 8 :
	inc       dword ptr [ebp+ 8 ]
@ 9 :
	mov       eax,dword ptr [ebp+ 8 ]
	cmp       byte ptr [eax], 0 
	je        short @ 10 
	mov       edx,dword ptr [ebp+ 8 ]
	mov       cl,byte ptr [edx]
	cmp       cl,byte ptr [ebp+ 12 ]
	jne       short @ 8 
@ 10 :
	mov       eax,dword ptr [ebp+ 8 ]
	mov       byte ptr [eax], 0 
@ 11 :
	ret 
вобщем, внутри цикла по 8 команд в обоих случаях, тут надо на число тактов смотреть .....
PS: Borland C++ 5.5.1
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33232109
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас
вобщем, внутри цикла по 8 команд в обоих случаях, тут надо на число тактов смотреть .....
PS: Borland C++ 5.5.1
Какой принципиальный вопрос однако
Еще раз: у тебя один лишний декремент и хучь убей:) Естественно он вне цикла поскольку выполняется только при истинности условия if (*p=='символ').

То есть имеем два сравнения, один инкремент в цикле и одно присваивание вне его в моем варианте и два сравнения, один инкремент в цикле, один декремент и одно присваивание вне его в твоем... Мне казалось, что это достаточно очевидно и без ассемблерного листинга :)
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33232116
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После включения оптимизации по скорости:
Код: 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.
	push      ebp
	mov       ebp,esp
	mov       ecx,dword ptr [ebp+ 12 ]
	mov       eax,dword ptr [ebp+ 8 ]
@ 1 :
	nop	
	jmp       short @ 3 
@ 2 :
	cmp       cl,dl
	jne       short @ 4 
	mov       byte ptr [eax], 0 
	dec       eax
@ 4 :
@ 5 :
	inc       eax
@ 3 :
	mov       dl,byte ptr [eax]
	test      dl,dl
	jne       short @ 2 
@ 6 :
	pop       ebp
	ret 



	push      ebp
	mov       ebp,esp
	mov       ecx,dword ptr [ebp+ 12 ]
	mov       eax,dword ptr [ebp+ 8 ]
@ 7 :
	nop	
	jmp       short @ 9 
@ 8 :
	inc       eax
@ 9 :
	mov       dl,byte ptr [eax]
	test      dl,dl
	je        short @ 10 
	cmp       cl,dl
	jne       short @ 8 
@ 10 :
	mov       byte ptr [eax], 0 
@ 11 :
	pop       ebp
	ret 
теперь по 6 команд внутри цикла (я так думаю, надо оценивать по длительности цикла)

вобщем, те же штаны, примерно
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33232118
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у тебя лишнее присваивание, т.е. даже если *p==0, то все равно *p=0;
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33232169
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас БарабасА у тебя лишнее присваивание, т.е. даже если *p==0, то все равно *p=0;
Posted via ActualForum NNTP Server 1.3
Ну и что? У каждого свои недостатки. Зато бинарный код короче, а текстовый читабельней (IMHO). И напомни мне, на что уходит тактов больше - на присваивание или на декремент переменных? :)

P.S. Тебе не надоело еще? Или ты тоже развлекаешься как можешь?
...
Рейтинг: 0 / 0
..хм... а КАК? ...можно обрезать строку?
    #33232209
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вобщем-то не в надоедании дело
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / ..хм... а КАК? ...можно обрезать строку?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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