Avatar billede dna Nybegynder
22. juli 2002 - 00:34 Der er 23 kommentarer og
2 løsninger

Fjerne bogstaver fra char.

Hej Alle

Hvordan går jeg lige det? Hvis vi siger jeg har en char som hedder "abe" den indeholder = "Jeg_er_indhold"

Så vil jeg gerne fjerne f.eks. 1 "e" fra abe - så den kommer til at hedde: "Jg_er_indhold" ??

Håber I forstår ?

dna
Avatar billede ladyhawke Novice
22. juli 2002 - 09:56 #1
Er din char ikke char streng[] ? I så fald:
DinChar[1]="";

Hvis du mangler positionen af "e" kan du brug forskellige funktione afhængigt af hvad du ønsker, f.eks.

#include <string.h>
#include <stdio.h>

void main( void )
{
  char string[] = "xyzabc";
  int  pos;

  pos = strcspn( string, "abc" );
  printf( "First a, b or c in %s is at character %d\n",
          string, pos );
}

Jeg ved ikke om det er dette du leder efter, men ellers må du uddybe lidt...
Avatar billede jpk Nybegynder
22. juli 2002 - 10:13 #2
Hvorfor ikke bruge C++'s string?

string abe = "jeg_er_indhold";
abe.erase(1, 1); // Position, antal karakterer
Avatar billede ladyhawke Novice
22. juli 2002 - 10:39 #3
også en god mulighed :-)
Avatar billede dna Nybegynder
22. juli 2002 - 12:06 #4
Jeg kan desværre ikke få de abe.erase til at virke. Virker ellers meget smart. :-(

left of '.erase' must have class/struct/union type

dna
Avatar billede jpk Nybegynder
22. juli 2002 - 12:40 #5
Det her burde virke...

#include <string>
using std::string;

void main()
{
    string abe = "jeg_er_indhold";
    abe.erase(1, 1); // Position, antal karakterer

    return 0;
}
Avatar billede dna Nybegynder
22. juli 2002 - 12:49 #6
Det gør det ikke her! :(

Kan det have noget med compiler eller lign. at gøre ?

dna
Avatar billede jpk Nybegynder
22. juli 2002 - 12:55 #7
Det er en C++ og ikke en C-kompiler du bruger, ikke?
Avatar billede dna Nybegynder
22. juli 2002 - 12:56 #8
jo jo! Bruger en C++ compiler! - måske der er en anden måde rundt om problemet ?

dna
Avatar billede jpk Nybegynder
22. juli 2002 - 13:06 #9
Hmm...

Hvilken kompiler bruger du?
Har du kopieret teksten direkte herfra? (hele ovenstående testprogram)
Avatar billede dna Nybegynder
22. juli 2002 - 16:14 #10
Jeg har taget hele det du skrev!
Avatar billede jpk Nybegynder
22. juli 2002 - 16:18 #11
Så spørger jeg igen, hvilken kompiler bruger du?
Avatar billede kamikaze Nybegynder
22. juli 2002 - 16:21 #12
Du skal lige huske at fjerne den sidste linie (return 0;). Det er en void main og den kan ikke returnere noget!!!
Avatar billede nak-m Nybegynder
22. juli 2002 - 16:26 #13
uha! jpk man 'må' da ikke bruge bruge void main! http://www.research.att.com/~bs/bs_faq2.html#void-main
Avatar billede jpk Nybegynder
22. juli 2002 - 16:34 #14
Jo, absolut!
Man skal selvfølgelig bare være opmærksom på hvilke følger/fordele/ulemper der er ved at afvige fra specifikationen...
Avatar billede nak-m Nybegynder
22. juli 2002 - 16:57 #15
man skal da følge standarden!
Avatar billede dna Nybegynder
22. juli 2002 - 17:29 #16
fjernede lige return 0; og så virkede det!

dna
Avatar billede dna Nybegynder
22. juli 2002 - 17:46 #17
Kan jeg ikke bruge <string.h> også så ?

Da jeg skal bruge strlen() osv ?

Den brokker sig nemlig lige nu over fejl i strlen()

dna
Avatar billede kamikaze Nybegynder
22. juli 2002 - 23:46 #18
Det ser ud til at fungere hos mig. Har du husket c_str() ???

// Kompilerer i konsol-applikation, MSVC++

#include <string>
#include <string.h>
#include <iostream.h>

using std::string;

int main()
{
    string abe = "jeg_er_indhold";
    abe.erase(1, 1); // Position, antal karakterer
    cout << abe.c_str() << endl;
    cout << strlen(abe.c_str()) << endl;

    return 0;
}
Avatar billede dna Nybegynder
23. juli 2002 - 00:03 #19
Jeg er absolute newbie til c++

Kan du forklare hvorfor man nu skal have c_str() på ?

dna
Avatar billede kamikaze Nybegynder
23. juli 2002 - 00:13 #20
Det er fordi strlen tager en char pointer som argument;
strlen(char*);

string er en anden type variabel. Det er en såkaldt STL type. STL står for Standard Template Library og er et bibliotek der følger med ALLE C++ implementationer.
Avatar billede kamikaze Nybegynder
23. juli 2002 - 00:14 #21
Når du så putter .c_str() bag på string-variablen "konverterers" den til char* og kan så bruges af bla. strlen funktionen.
Avatar billede dna Nybegynder
23. juli 2002 - 11:53 #22
Kamikaze og jpk! Jeg er taknemmelig for jeres hjælp! Håber at kunne drage nytte af den med resten af mine point! :-)

I får 30 point hver! :-)

dna
Avatar billede kamikaze Nybegynder
23. juli 2002 - 16:11 #23
Takker for points :o)
Avatar billede dna Nybegynder
23. juli 2002 - 17:19 #24
btw: Kunne man så have lavet en pointer på stringen i starten, og så bare lave alle udførelserne på pointeren ?

dna
Avatar billede jpk Nybegynder
24. juli 2002 - 08:14 #25
Hvorfor bruge strlen..?
cout << abe.size() << endl;

Det med pointeren var en meget anvendt fremgangsmåde i C, men i den objektorienterede verden (C++) betragtes det nok lidt som dårlig programmeringsstil.
Har man kun ganske få pointere, er det naturligvis let at holde styr på. Har man derimod en masse pointere til forskellige lokationer i strenge, kan det hurtigt gå galt! Fx kan man jo komme til at sætte pointeren til at pege på noget forkert memory (der er intet tjek) og derved få programmet til at crash'e. Det kan være ret svært at finde sådanne fejl..!
Bruger man istedet et index, kan man altid let se om det ligger inden for strengens længde.
STL giver også mulighed for at bruge iterators, der minder meget om brug af pointers, fx:

Her er Connection en vector indeholdende objekter af typen CClientConnection.

ConnectList::iterator it = Connections.begin(); // Iterator sættes til vectorens begyndelse
while(it!=Connections.end())
{
    CClientConnection *con = (CClientConnection *)(*it);
    delete con;
    it++; // Næste element
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester