• ベストアンサー

文字除去

こんにちは、 c/c++ 初心者です(PG経験はたっぷりです) やりたい事は、time(hh:mi:ss)文字列(string or char)から、コロンを除去するのですが、素敵な方法が思いつきません。 今は単純に、文字列のpositionを固定で指定してstrcatしてます、目的は果たせてましたが、、、 他に、素敵な方法はありましたら、ご教示ください。 文字列:16:24:55 を 162455 に編集する。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★単純にコロン文字以外をコピーすればよい。 ・PG経験はたっぷりあるみたいですが、C/C++ のポインタは分かりますか?  ポインタを使って別領域にコロン以外の文字をコピーすれば簡単ですよ。  下にそのサンプルを載せます。 サンプル: char *coroncut( char buff[], const char string[] ) {  char *dest;    for ( dest = buff ; *string != '\0' ; string++ ){   if ( *string != ':' ){    *dest++ = *string;   }  }  *dest = '\0';  return buff; } その他: ・上記の関数の第一引数にコピー先領域を、第二引数に時間文字列を渡して下さい。  つまり、  char buff[ 16 ];    coroncut( buff, "16:24:55" );  と指定します。すると buff にはコロン文字以外の数字 162455 がセットされます。 ・以上。今後の参考に!

masa-it
質問者

お礼

早速の回答ありがとうございます。 ポインタをずらして行って、 notの場合だけコピーするのですね。C言語っぽいですね。 ※なぜか、殆どこのままソースに移植したら除去できませんでした。。。 :が;でした。。。自分、目があまり良くないので、違うことにきずくまで、しばらく掛かりました。(・o・) ありがとうございました。

その他の回答 (2)

  • DT200
  • ベストアンサー率38% (63/164)
回答No.3

こんな感じでどうでしょう void rmcolon( char *str ) {   char *p;   p = str;   while( *str != '\0' ){     if( *str != ':' ){       *p = *str;       p++;     }     str++;   }   *p = '\0'; }

masa-it
質問者

お礼

早速の回答ありがとうございます。 ポインタをずらして行って、 notの場合だけコピーするのですね。C言語っぽいですね。 ありがとうございます。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★追記。 ・スペルミスしてしまいました。  間違い⇒coroncut  正しい⇒coloncut  でした。

関連するQ&A