Vypsání části char* – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vypsání části char* – C / C++ – Fórum – Programujte.comVypsání části char* – C / C++ – Fórum – Programujte.com

 

trackmaniak
~ Anonymní uživatel
4 příspěvky
14. 5. 2012   #1
-
0
-

Nějak to pořád nikde nemůžu vyhrabat. Jak se dá vypsat část char* ? 

++ZDROJAK_1++

Výstup by měl být:

1
Nahlásit jako SPAM
IP: 213.195.215.–
ingiraxo+15
Grafoman
14. 5. 2012   #2
-
0
-

char* je normální pole znaků, takže jen určíš jakej znak na jakým indexu (pozici) chceš

char* slovo = "++ZDROJAK_1++";
char znak = *(slovo + 10); // nebo: slovo[10];
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
trackmaniak
~ Anonymní uživatel
4 příspěvky
14. 5. 2012   #3
-
0
-

#2 ingiraxo
díky :)

Nahlásit jako SPAM
IP: 213.195.215.–
trackmaniak
~ Anonymní uživatel
4 příspěvky
15. 5. 2012   #4
-
0
-

Ještě menší otázku, jak vypsat těch znaků víc? V pythonu to šlo takto:

promenna = "12345678912345678911"

print(promenna[10:20])

výstup:

2345678911

Existuje nějáký obdobný způsob?

Nahlásit jako SPAM
IP: 213.195.215.–
KIIV
~ Moderátor
+43
God of flame
15. 5. 2012   #5
-
0
-

treba cyklem znak po znaku

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
trackmaniak
~ Anonymní uživatel
4 příspěvky
15. 5. 2012   #6
-
0
-

#5 KIIV
Takže nízkoůrovňově. V tom případě ale potřebuji spočítat znaky v poli znaků, jak to provést?

nějak přes sizeof? :D

Nahlásit jako SPAM
IP: 213.195.215.–
vitamin+8
Grafoman
15. 5. 2012   #7
-
0
-

Mozes to vypisat aj cez samotny printf:

const char *promenna = "12345678912345678911";
printf("%10s", promenna + 10);	
	
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
15. 5. 2012   #8
-
0
-

#7 vitamin
to ma jen jednu drobnou chybu.. neosekava to na 10 znaku.. vypise to vse az na konec..

zavaznejsi je, ze ani nekontrolujes, jestli neni retezec kratsi.. bude to pak vypisovat nejaky smeti do prvni nuly

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
15. 5. 2012   #9
-
0
-

#8 KIIV
zabudol som dat bodku, cize to bude %.10s

samozrejme ze to nekontroluje velkost pola, ale to uz je lepsie osetrovat vzhladom na konkretnu situaciu. 

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Doomista+1
Stálý člen
15. 5. 2012   #10
-
0
-

#6 trackmaniak
sizeof myslím jde, obdobně taky strlen() ze string.h

Nahlásit jako SPAM
IP: 83.240.1.–
Na vše stačí iostream...
ingiraxo+15
Grafoman
16. 5. 2012   #11
-
0
-

 Takto?

#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
char* cisla = "3466856834235760756745636487";

// vypise cisla od indexu 5 az 10
for_each(cisla + 5, cisla + 10, [&](char c) { cout << c; });
return 0;
}

A pokud máš pole charů jako char* (přes ukazatel) tak nejde použít sizeof() ale jedině strlen() a doporučuju spíš použít nějakej buffer, pokud ten text není konstanta

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
_Radek_
~ Anonymní uživatel
88 příspěvků
23. 5. 2012   #12
-
0
-

Zkusil bych to takto (podobne jako ingiraxo, akorat to for_each se mi zda trochu jako raketomet na komara :), tedy jen muj nazor):

char* pole = "++Zdrojak_1++";

for(int a = 9; a < 11; a++)
	cout << pole[a];

Ale pokud chces vypsat neco jako to cislo (libovolny retezec) za retezcem "zdrojak_" az do prvniho znaku "+", pridas jen podminku navic:

for(int a = 9; a<11, pole[a]!='+'; a++)
	cout << pole[a];
Nahlásit jako SPAM
IP: 91.187.60.–
_Radek_
~ Anonymní uživatel
88 příspěvků
23. 5. 2012   #13
-
0
-

Edit: Omlouvam se, ty cisla indexu jsem strelil od oka, samozrejme si je musis prizpusobit tvemu pripadu :)

Nahlásit jako SPAM
IP: 91.187.60.–
crazy
~ Moderátor
+10
Grafoman
23. 5. 2012   #14
-
0
-

#12 _Radek_
až na to, že když máš ve foru podmínky oddělené čárkou, tak se počítá jen s tou druhou... musí tam být &&

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 113 hostů

Podobná vlákna

Vypsání — založil Karel

Vypsání údajů o PC — založil eidam1995

Vypsání matice — založil Asinkan

Vypsani souboru — založil Piwik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý