• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zamiana tablicy string na 1 int

VPS Starter Arubacloud
+1 głos
223 wizyt
pytanie zadane 18 września 2019 w C i C++ przez martin1724 Użytkownik (690 p.)
Cześć, szukając odpowiedzi w internecie nie znalazłem jej. Czy jest możliwa zamiana tablicy stringów, w której są same cyfry na jedną liczbę typu int albo float? Jeśli tak to w jaki sposób?

2 odpowiedzi

+1 głos
odpowiedź 18 września 2019 przez tkz Nałogowiec (42,020 p.)
1
komentarz 18 września 2019 przez j23 Mędrzec (195,220 p.)

Jeśli std::string, to std::stoi.

–1 głos
odpowiedź 18 września 2019 przez Chess Szeryf (76,710 p.)

Swego czasu napisałem "funkcję" atoi__ do tego typu ćwiczeń (konwersja z typu "char" na "int"). Piszę w cudzysłowie, ponieważ język assembly x86-64 operuje na pamięci prawie, że bezpośrednio, wiec trudno odróżniać tam typy.



	global _main
	extern _printf
	extern _exit

	section .data

fmt_u:	db "%u", 0
fmt_s:	db "%s", 0
str_s:	db "200", 0
str_s2:	db "20525", 0
	
	section .text
_main:
	

	mov ebx, str_s2
	lea eax, [ebx+1]


	
	
	call atoi__


	add eax, 475


	push eax
	push fmt_u
	call _printf
	add esp, 8


	push 0
	call _exit
	add esp, 4
	
	
	ret
	
atoi__:

	

	mov ecx, -1
        xor esi, esi
	


	call len_of_n

	dec edi

h1:



	inc ecx
	
	mov dl, byte [eax+ecx-1]

	mov ebx, edx

	sub ebx, 0x30

	;; (8*10)+3

      	; mov esi, ebx	

 	cmp ecx, 1		
	jge hhh
	
   
hhh2:	

	push eax
	push edi
	
	mov eax, 10

	mul ebx

	mov ebx, eax

	mov esi, ebx

	pop edi
	pop eax




	


				; hhh2:

	cmp ecx, edi


	
	jne h1

	

	xor edx, edx
	mov eax, ebx
	mov ebx, 10
	div ebx


	ret


hhh:

	add ebx, esi

	mov esi, ebx

	jmp hhh2

	ret

len_of_n:


        mov edi, -1



loop_x:
	

	inc edi

	

	cmp byte [eax-1+edi], 0x00
	jne loop_x
	

	ret
	
	section .bss

Kompilacja: nasm -fwin32 atoi1.asm && gcc atoi1.obj -o atoi1.exe && atoi1.exe

Nie testowałem tego kodu za bardzo. Wydaje się być w miarę poprawnym. Powinien działać i spełniać założenia. Ale jak mówię należałoby przetestować i sprawdzić, czy wszystko z programem jest w porządku.

komentarz 18 września 2019 przez martin1724 Użytkownik (690 p.)
nie mam pojęcia co to w ogóle jest
komentarz 18 września 2019 przez j23 Mędrzec (195,220 p.)

@Chess, po co mu kod assemblera, skoro pyta o rozwiązanie w C++?

komentarz 18 września 2019 przez Chess Szeryf (76,710 p.)

Tę funkcję może sobie wyeksportować do C++ i używać w tymże języku, więc wrzuciłem. Zasada mojego atoi__ jest taka.

atoi__("8234") => ((((((8*10)+2)*10)+3)*10)+4)
komentarz 18 września 2019 przez j23 Mędrzec (195,220 p.)
Tylko po co? W bibliotekach standardowych ma kilka funkcji, które zrobią to bez zbędnych komplikacji.

Podobne pytania

0 głosów
0 odpowiedzi 1,190 wizyt
0 głosów
2 odpowiedzi 268 wizyt
0 głosów
1 odpowiedź 826 wizyt
pytanie zadane 25 listopada 2020 w C i C++ przez rinsu Nowicjusz (170 p.)

93,021 zapytań

141,986 odpowiedzi

321,287 komentarzy

62,366 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...