Přehození znaků v řetězci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Přehození znaků v řetězci – C / C++ – Fórum – Programujte.comPřehození znaků v řetězci – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Ivan
~ Anonymní uživatel
28 příspěvků
26. 2. 2009   #1
-
0
-

Zdravím všechny a přícházím s novým dotazem :) zkoušel jsem si udělat primitivní funkci pro přehoz písmen v řetězci (čili jestli je řetězec "Ping pong" tak výstup by měl být "gnop gniP", žel se to zaseklo na končícím znaku '\0', což je celkem logické, ale něják mi nejde ho vyhodit a přesunout na konec a celé pole o jedno posunout, vždy se mi program sekne :/ .. mohli by jste mi vy zkušenější ukázat jak na to?

#include <stdio.h>

#include <string.h>

char prehod_znaky_v_retezci (char* r) {
int v_r = strlen(r), i = 0; // Velikost řetězce a čítač
char _r[v_r];
for (;i<v_r;) {
_r[i++] = r[v_r--];
}
return *_r;
}

int main (int argc, char** argv) {
char retezec[] = "Zlato";
printf("%s",prehod_znaky_v_retezci(retezec));
return 0;
}
Díky všem již dopředu.

Nahlásit jako SPAM
IP: 85.207.199.–
Reklama
Reklama
dannyk0
Věrný člen
26. 2. 2009   #2
-
0
-

A co tak zkusit jet cyklus s presnym poctem opakovani jako je delka slova ;)



for (int i = 0; i < strlen(r); i++){}

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Ivan
~ Anonymní uživatel
28 příspěvků
26. 2. 2009   #3
-
0
-

Pravda, zkusil jsem to trochu upravit.

#include <stdio.h>

#include <string.h>

char* prehod_znaky_v_retezci (char* r) {
int v_r = strlen(r)-1, i = 0; // Velikost řetězce a čítač
char _r[v_r];
_r[0] = r[v_r];
for (;i<v_r;) {
_r[1+i++] = r[(v_r-1)-i];
}
_r[strlen(r)] = '\0';
/**
* Toto vypíše řetězec správně tak jak bych si to představoval
* ve funkci main.
*/
for (i = 0; i<strlen(_r); i++) {
printf("%c",_r[i]);
}
/**
* Zde si již nevím rady .. vypíše se krásně horní cyklus, ale
* u returnu program zamrzne ..
*/
return _r;
}

int main (int argc, char** argv) {
char retezec[] = "Zlato";
printf("%s",prehod_znaky_v_retezci(retezec));
return 0;
}

Nahlásit jako SPAM
IP: 85.207.199.–
dannyk0
Věrný člen
27. 2. 2009   #4
-
0
-

Celkove ten cyklus na to prehazeni mas divny, zkus ten klasicky cyklus, ktery sem ti napsal vyse.A co tim myslis ,ze zamrzne? Chyba v pameti?

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
m->29+6
Super člen
27. 2. 2009   #5
-
0
-

strlen sa nikdy nepoužíva takto:

for (int i = 0; i < strlen(r); i++){}

Je to veľmi výpočtovo aj časovo náročné!! Tuná môj kód - hádam pomôže:-)
#include <stdio.h>

#include <stdlib.h>
#include <string.h>

void reverzia(char *text) {
int znakov = strlen(text);

for(int i=0; i<znakov/2; i++) {
text[i] ^= text[znakov-i-1];
text[znakov-i-1] ^= text[i];
text[i] ^= text[znakov-i-1];
}
}

int main(void) {
char text[] = "Pepek Namornik";
reverzia(text);
printf("%s\n", text);

return EXIT_SUCCESS;
}

Nahlásit jako SPAM
IP: 147.229.208.–
Quiark0
Věrný člen
27. 2. 2009   #6
-
0
-

m->29 napsal:
strlen sa nikdy nepoužíva takto:

for (int i = 0; i < strlen(r); i++){}

Je to veľmi výpočtovo aj časovo náročné!!



The Sad Tragedy of Micro-Optimization Theater http://www.codinghorror.com/blog/archives/001218.html :smile1:

EDIT: Ale jo, já bych ho asi taky vyhodil ven.

Nahlásit jako SPAM
IP: 89.102.6.–
KIIV+42
God of flame
27. 2. 2009   #7
-
0
-
Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
dannyk0
Věrný člen
27. 2. 2009   #8
-
0
-

Ale muze se to tak pouzivat,zalezi na kompileru.Napriklad MS kompiler to zoptimalizuje tak,aby se to nemuselo znova pokazde prepocitavat,zalezi na prekladaci.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Wizard0
Stálý člen
27. 2. 2009   #9
-
0
-

To Ivan : Ta tvoja funkcia je nejaka divna. Preco vracia iba jeden znak nebolo by vyhodnejsie vraciat cely retazec? A dalsia vec pouzil si staticke alokovanie pola '_r', preslo ti to vobec cez kompiler? Musis alokovat dynamicke, kedze nepoznas jeho velkost pri kompilacii:



char *_r = new char[v_r];

Nahlásit jako SPAM
IP: 85.216.182.–
Ivan
~ Anonymní uživatel
28 příspěvků
27. 2. 2009   #10
-
0
-

To Wizard : Díky moc, ano to bylo jádro problému, s dynamickou alokací to již funguje jak má :)

Nahlásit jako SPAM
IP: 85.207.199.–
silent0
Stálý člen
27. 2. 2009   #11
-
0
-

a tohle nti nestačí ?


#include "iostream"

#include "cstring"

using namespace std;

int main()
{


char jmeno[15];
cout<<"zadej jmeno bude vypsano po zpatku "<<endl;


cin.getline(jmeno, 15);



cout << "jmeno po zpatku"<<endl;
int z=strlen(jmeno)-1;
while(z>=0)
{
cout << jmeno[z];
z--;
}

return 0;
}

Nahlásit jako SPAM
IP: 90.182.248.–
C#
crAzY^
~ Moderátor
+10
Grafoman
27. 2. 2009   #12
-
0
-

To silent : je lepší použít #include <>

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Quiark0
Věrný člen
27. 2. 2009   #13
-
0
-
Nahlásit jako SPAM
IP: 193.86.140.–
Selfer
~ Anonymní uživatel
10 příspěvků
9. 3. 2009   #14
-
0
-

Zdravim všechny...potřeboval bych poradit jak otočit cout v tomto kódu:



int Prevod(ULONG dec, USHORT soustava)
{
int vysledek, temp;
if (dec == 0)
{
cout << "\nMusis to cist pozpatku! :-)\n";
Opak();
}
else
{
vysledek = dec % soustava;
cout << vysledek;
temp = dec / soustava;
return (Prevod(temp, soustava));
}
}

Předem dík za rady.

Nahlásit jako SPAM
IP: 193.179.133.–
Wizard0
Stálý člen
9. 3. 2009   #15
-
0
-

To Selfer : Ako otocit cout? Definuj trosku presnejsie co myslis :).

Nahlásit jako SPAM
IP: 85.216.182.–
Selfer
~ Anonymní uživatel
10 příspěvků
9. 3. 2009   #16
-
0
-

No...vždycky se provede dělení se zbytkem a výsledek se pak zobrazí. Je to převod z desítkové soustavy do dvojkové, čtyřkové a osmičkové. A já potřebuju, aby se to zobrazovalo od konce. Řekl bych, že nemusím popisovat, jak se převádí mezi soustavami.

Nahlásit jako SPAM
IP: 193.179.133.–
Wizard0
Stálý člen
9. 3. 2009   #17
-
0
-

To Selfer : No tak to musis ukladat do pola a to vypisat od zadu. Inak neviem ci sa nejako da "flushnut" 'ostream' od zadu skus pozriet dokumentaciu.

Nahlásit jako SPAM
IP: 85.216.182.–
Selfer0
Duch
9. 3. 2009   #18
-
0
-

Dík za rady už to frčí :-)

Nahlásit jako SPAM
IP: 193.179.133.–
Směj se. Bude hůř! Začínám s C++, PHP, MySql.
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, 97 hostů

Moderátoři diskuze

 

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