Avatar billede gargantua Nybegynder
30. april 2004 - 01:15 Der er 2 kommentarer

Udskiftning af tegn med tekststrenge i cpp?

Hej,
jeg skal lave et program som udskifter forekomst af tegnene # og & i en streng, med to forskellige navne (nye strenge). Jeg har prøvet:
        String numString, ogString, str;

    //indlæs streng der skal udskiftes med #
    cout << "Skriv navn paa modtager: ";
    cin >> numString;

    //indlæs streng der skal udskiftes med &
    cout << "Skriv firmanavn: ";
    cin >> ogString;

    for(i=0;i<SIZE;i++)
    {
        str=strArray[i];
        int pos=0;
        while((index=str.find_first_of('#', index))!=-1)
        {
            str.remove(index, 1);
            str.insert(index, numString);
            index++;
        }

        while((index=str.find_first_of('&', index))!=-1)
        {
            str.remove(index, 1);
            str.insert(index, ogString);
            index++;
        }

Men det virker ikke, når jeg udskriver tekst strengen er der ikke blevet udskiftet noget. Hvad er galt?

Hilsen
Jens
Avatar billede bertelbrander Novice
30. april 2004 - 01:37 #1
Jeg kan se to problemer:

str=strArray[i];

Her tager du (så vidt jeg kan se) et kopi af strengen og modificerer denne.

I kaldet til find_first_of bruger du index, som (så vidt jeg kan se) ikke er initialiseret. Hvis du blot vil søge fra starten af strengen fjerner du blot dette argument, eller skriver 0.
Avatar billede bertelbrander Novice
30. april 2004 - 01:39 #2
Et komplet program der ser ud til at virke (jeg bruger std::string i stedet for String):

#include <string>
#include <iostream>

using namespace std;

const int SIZE = 2;

string strArray[2];

int main()
{

  strArray[0] = "Ole#Hansen&Petersen#";
  strArray[1] = "Kall#Hansen&Nielsen#";

  string numString, ogString, str;

  //indlæs streng der skal udskiftes med #
  cout << "Skriv navn paa modtager: ";
  cin >> numString;

  //indlæs streng der skal udskiftes med &
  cout << "Skriv firmanavn: ";
  cin >> ogString;
  int i, index;
  for(i=0;i<SIZE;i++)
  {
      string &str = strArray[i];
      int pos=0;
      while((index=str.find_first_of('#'))!=-1)
      {
          str.erase(index, 1);
          str.insert(index, numString);
          index++;
      }

      while((index=str.find_first_of('&'))!=-1)
      {
          str.erase(index, 1);
          str.insert(index, ogString);
          index++;
      }
  }
  for(i=0;i<SIZE;i++)
    cout << strArray[i] << endl;
}
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