2016-03-22 17 views
1

文字列から最初に 'w'を、最後に 'w'を削除しようとしています。 私が最初に「W」を削除したが、最後の1を削除できませんでしたし、ここに私のコードです:文字配列から最初と最後の 'X'文字を削除します

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

もう1つの問題は、文字列に実際に 'w'が含まれていないと、' pstr2'のバッファがオーバーフローする可能性があるということです([MCVE](http://stackoverflow.com/help/mcve) –

答えて

3

あなたの人生を簡単に作成し、find_first_offind_last_oferasestd::stringを使用しています。

#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; 
} 
関連する問題