• ベストアンサー

指定した文字を削除したい

こんにちは。質問をさせてください。 --------------------------------------------------------------- address = "ここ$http://www.aaaaa.co.jp$moji=dddd$"; --------------------------------------------------------------- 変数addressに格納された文字列で、 "http://"の1文字前に"$"があった場合は、 "$"を削除したいのですが、どのようにすれば いいでしょうか? ※http://の前の"$"以外はそのまま残します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

#include <iostream> #include <string> int main() { std::string address = "ここ$http://www.aaaaa.co.jp$moji=dddd$"; std::string::size_type pos = address.find("$http://"); if ( pos != std::string::npos ) { address.erase(pos,1); } std::cout << address << std::endl; return 0; }

その他の回答 (2)

  • me_no_car
  • ベストアンサー率24% (22/90)
回答No.3

いろいろやり方はあると思いますが 基本的なやり方として こんな感じでどうでしょう? #include <stdio.h> int main() { int flag; char *address = "ここ$http://www.aaaaa.co.jp$moji=dddd$"; char *wk; for( wk=address , flag=0 ; *wk ; wk++){ if( *wk == '$' && flag == 0){ *wk = *(wk + 1); flag = 1; } else if( flag == 1 ){ *wk = *(wk + 1); } } printf("address = [ %s ] \n", address); }

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

#1の方のはC++ですが、Cの方での考え方を書きます。 文字列の中で"$http://"を検索して、 存在しなければなにもしない。 存在すれば、一個ずつずらせばいいわけです。 つまり、文字列を、一個ずらして自分自身にコピーするわけです。 検索には標準関数strstr()を使います。(教科書を見てください) ずらしてコピーするにはどうしたらいいかな…。 ただのコピーならstrcpy()という関数があるのですが、 こいつは「コピー元とコピー先が同じだった場合、未定義(プログラムとして問題あり)」という制限があります。 だからwhileかdo whileを使えばいいでしょう。 だいたいこんな感じになると思います。 (コンパイルはしてないので自信なしですが) char *p; p = strstr(data, "$http://"); if(p){ do{ *p = *(p+1); }while(*(p+1)); }

関連するQ&A