2016-03-22 4 views
1

Я пытаюсь удалить первую 'w' и last 'w' из строки. я удалил первый «ш», но не может удалить последний, и вот мой код:Удалить первый и последний символ «Х» из массива символов

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

Вы вызываете 'gets_s' с неправильным количеством аргументов. Ваш компилятор должен рассказать вам об этом. Важно понять и исправить все, о чем говорит ваш компилятор. –

+0

Другая проблема заключается в том, что вы можете переполнять буфер 'pstr2', если строка фактически не содержала' w' (не могу сказать точно, поскольку вы не отправляли [MCVE] (http://stackoverflow.com/help/mcve) –

ответ

3

сделать вашу жизнь проще и использовать std::string с find_first_of, find_last_of и 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; 
} 
Смежные вопросы