Potrebuju co nejefektivnejsi algoritmus na obraceni retezce. Staci funkce ktera ma jako parametr retezec a vraci ho obraceny pozpatku. Diky za jakykoliv namet....
//adams: upraven název threadu.
Moderátor: Moderátoři Živě.cz
#define SWAPTCHAR(a,b) { TCHAR t; t = (a); a = b; b = t; }
TCHAR *invstr(TCHAR *str)
{
TCHAR *forward = str;
TCHAR *backward = str + _tcslen(str) - 1;
TCHAR temp;
while (backward > forward)
{
SWAPTCHAR(*forward, *backward);
forward++;
backward--;
}
return str;
}
while (backward > forward)
{
SWAPTCHAR(*forward, *backward);
forward++;
backward--;
}
[code]
while (backward > forward)
{
SWAPTCHAR(*forward, *backward);
forward++;
backward--;
}
[/code]
PepaH píše:Potrebuju co nejefektivnejsi algoritmus na obraceni retezce. Staci funkce ktera ma jako parametr retezec a vraci ho obraceny pozpatku. Diky za jakykoliv namet....
#include <string>
int main() {
typedef std::string string_t;
string_t s1("nejaky retezec");
//obraceni:
string_t s2(s1.rbegin(), s1.rend());
return 0;
}
PepaH píše:Tak uz to mam
- Kód: Vybrat vše
void obrret(char s[])
{
int c,i,j;
for(i=0,j=strlen(s)-1;i<j;i++,j--)
{ c=s[i];s[i]=s[j];s[j]=c;}
}
snad je to ten nejefektivnejsi zpusob....
Chichi píše:a co takhle jak prevest retezec velkych pismen na malá dá se to udelat jednou funkcí???? (bez cyklů)l/quote]
PepaH píše:Tak uz to mam
void obrret(char s[])
{
int c,i,j;
for(i=0,j=strlen(s)-1;i<j;i++,j--)
{ c=s[i];s[i]=s[j];s[j]=c;}
}
snad je to ten nejefektivnejsi zpusob....
#include <string>
#include <iostream.h>
using namespace std;
int main(void)
{
char retazec[] = "a obratime poradna.net";
int velkost = strlen(retazec);
char* reverse = new char[velkost+1];
for(int i=0,rev=velkost-1; i<velkost; i++,rev--)
{
reverse[rev] = retazec[i];
}
reverse[i] = retazec[i]; // ukoncime retazec znakom '\0'
cout << reverse << endl;
delete[] reverse;
return 0;
}
khihihi píše:... praca s indexami [] je pre cpu rychlejsia nez s pointrami ...
Label1->Caption = "ABCDEFGHCHIJKLMNOPQRSTUVWXYZ";
int iStrLen= Label1->Caption.Length();
int iSteper= 0;
unsigned char *bSourceString = new char [iStrLen + 1];
unsigned char *bTargetString = new char [iStrLen + 1];
strcpy(bSourceString, Label1->Caption.c_str());
// CYKLUS
for (int i = iStrLen; i > 0; i --)
{
bTargetString[iSteper] = bSourceString[i-1];
iSteper++;
}
Label2->Caption = AnsiString((char*)bTargetString, iStrLen);
delete [] bSourceString;
delete [] bTargetString;
Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků