プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。質問をさせてください。

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

A 回答 (3件)

#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;
}
    • good
    • 0

#1の方のはC++ですが、Cの方での考え方を書きます。



文字列の中で"$http://"を検索して、
存在しなければなにもしない。
存在すれば、一個ずつずらせばいいわけです。
つまり、文字列を、一個ずらして自分自身にコピーするわけです。

検索には標準関数strstr()を使います。(教科書を見てください)
ずらしてコピーするにはどうしたらいいかな…。
ただのコピーならstrcpy()という関数があるのですが、
こいつは「コピー元とコピー先が同じだった場合、未定義(プログラムとして問題あり)」という制限があります。
だからwhileかdo whileを使えばいいでしょう。

だいたいこんな感じになると思います。
(コンパイルはしてないので自信なしですが)

char *p;
p = strstr(data, "$http://");
if(p){
do{
*p = *(p+1);
}while(*(p+1));
}
    • good
    • 2

いろいろやり方はあると思いますが


基本的なやり方として
こんな感じでどうでしょう?

#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);
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!