2016-03-22 11 views
1

Ich versuche, das erste' w 'und das letzte' w 'aus einer Zeichenfolge zu löschen. Ich löschte den ersten ‚w‘, konnte aber die letzte nicht löschen, und hier ist mein Code:Lösche das erste und letzte 'X'-Zeichen aus dem Zeichenfeld

char str1[80], *pstr1, *pstr2; 
cout << "Enter a String:\n"; 
gets_s(str1); 
pstr1 = str1; 
pstr2 = new char[strlen(str1)]; 
int n = strlen(str1) + 1, k = 0, i = 0; 
bool s = true; 
while (k < n+1) 
{ 

    if (strncmp((pstr1 + k), "w", 1) != 0) 
    { 
     *(pstr2 + i) = *(pstr1 + k); 
     i++; 
     k++; 
    } 
    else if(s == true) 
    {  
     k++; 
     s = false; 
    } 
    else 
    { 
     *(pstr2 + i) = *(pstr1 + k); 
     i++; 
     k++; 
    } 
} 
+0

Sie rufen 'gets_s' mit falscher Anzahl von Argumenten auf. Dein Compiler sollte dir davon erzählen. Es ist wichtig, alles zu verstehen und zu beheben, von dem dein Compiler erzählt. –

+0

Ein weiteres Problem ist, dass Sie den Puffer von 'pstr2' überlaufen lassen könnten, wenn der String kein' w' enthält (kann nicht mit Sicherheit sagen, da Sie [MCVE] nicht gepostet haben (http://stackoverflow.com/help/mcve) –

Antwort

3

Machen Sie Ihr Leben einfach und verwenden std::string mit find_first_of, find_last_of und erase.

#include <string> 

void erase_first_of(std::string& s, char c) 
{ 
    auto pos = s.find_first_of(c); 

    if (pos != std::string::npos) 
    { 
     s.erase(pos, 1); 
    } 
} 

void erase_last_of(std::string& s, char c) 
{ 
    auto pos = s.find_last_of(c); 

    if (pos != std::string::npos) 
    { 
     s.erase(pos, 1); 
    } 
} 

#include <iostream> 

int main() 
{ 
    std::string s = "hellow, worldw\n"; 

    erase_first_of(s, 'w'); 
    erase_last_of(s, 'w'); 

    std::cout << s; 
} 
Verwandte Themen