"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

C++: String in ein Array einlesen

Facetious 26.11.2003 - 19:27 4874 27
Posts

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
In Wahrheit ist es sogar O(n^3), weil noch jedesmal strlen aufgerufen wird.

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Huch, stimmt. :eek:
Ich bin heute offenbar unaufmerksam ... wird Zeit für einen Urlaub. :)

Facetious

Addicted
Avatar
Registered: Oct 2003
Location: Wien
Posts: 406
@ that

diese seltsame aufgabe hat unsere klasse von unserem prof. als hü gekriegt ---> der hat sie von der tu

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Ihr bekommt Hausübungen für Dinge, die nicht unterrichtet werden?

Facetious

Addicted
Avatar
Registered: Oct 2003
Location: Wien
Posts: 406
oja
wir machen c++
ich hab aber keinen schimmer von dem bsp

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von Facetious
ich hab keine ahnung von c++

Welche Schule ist das?

Facetious

Addicted
Avatar
Registered: Oct 2003
Location: Wien
Posts: 406
ach gott

keine ahnung war übertrieben ... ich kanns ein bissi

geforceraid

Big d00d
Avatar
Registered: Mar 2003
Location: Uhrwerk
Posts: 299
Zitat von Ringding
In Wahrheit ist es sogar O(n^3), weil noch jedesmal strlen aufgerufen wird.

stimmt :D
ziemlich russisch gecodet.
Aber hauptsache es funzt :)

einfacher würds natürlich mit einer funktion gehen, die ein zeichen aus einem string löscht.
im pascal heisst die glaub ich truncate oder?

edit: so funzts (falls du es noch nicht hinbekommen hast):

#include<stdio.h>
#define length 11
int main()
{
char var[length] = "ehaeelloee";
int laenge = length;

for(int i = laenge; i >= 0; i--)
{
if(var[i] == 'e')
{
for(int j = i; j < length; j++)
{
var[j] = var[j+1];
}
laenge--;
var[laenge-1] = '\0';
}
}
printf("%s\n", var);
}
Bearbeitet von geforceraid am 09.12.2003, 15:06

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
wozu diese ganzen umständlichen schleifen? -> schau dir mal die funktion strcpy an ;)

schliesslich war die aufgabenstellung "jeden einzelnen buchstaben" in ein array zu schreiben und nicht "jeden buchstaben einzeln" :)

aber nicht vergessen vorher den speicher für das array je nach länge des eingegebenen textes zu reservieren, sonst wirds grimmig

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
@geforceraid: Du denkst viel zu umständlich. ;)

Code:
#include <stdio.h>
int main()
{
  char var[] = "ehaeelloee";
  char *out = var;
  for (char *in = var; *in; ++in)
    if (*in != 'e')
      *out++ = *in;
  *out = 0;
  printf("%s\n", var);
}

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
<evil>
Hab ich was verpasst? gibts einen neuen ocat-grotesk-programming award?
</evil>

Facetious: Nächstes mal bitte eine brauchbare beschreibung.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Yeah, overclocker's obfuscated coding contest :)

PHaX

Little Overclocker
Avatar
Registered: Oct 2001
Location: Vienna
Posts: 53
Hi Leute!
Um das ganze noch zuverkomplizieren (angenommen der InString ist argv[BLA] (BLA >= 1 && BLA <= argc) würde das die C Runtime Parameter überschreiben) hier eine Variante die den Input String nicht überschreibt:

#include <stdio.h>
int main ()
{
/* assumed that argc > 1! */
const char *var = argv[1];
char *pOut = (char*) alloca (strlen (var) + 1); /* maybe _alloca for Microsoft Visual C++ */
for (; *var; ++var)
if (*var != 'e')
*pOut++ = *var;
*pOut = 0;
printf("%s\n", Out);
return 0; /* was missing ;-) */
}
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz