コンマ以前の部分を削除したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shiro4ao

コンマ以前の部分を削除したい

#1

投稿記事 by shiro4ao » 15年前

最初に出てくるコンマより前の部分を消したいです。
「a,b,c,d」が「b,c,d」になって欲しいのです。
以下のようなコードを書きましたがうまくいきませんでした。
=======================ここから==========================
#include <stdio.h>
#include <string.h>

int main(void){
char *p,buf2[/url]="a,b,c,d";
int k;
p = strchr( buf2, ',' );
if ( p != NULL ){
for(k=0;k<(int)p-(int)buf2;k++){
strcpy(buf2+k," ");
}
}

printf("%s",buf2);
return 0;
}
==================ここまで===============================
何がまずかったのでしょうか?

ドラ

Re:コンマ以前の部分を削除したい

#2

投稿記事 by ドラ » 15年前

>最初に出てくるコンマより前の部分を消したいです。
>「a,b,c,d」が「b,c,d」になって欲しいのです。
コンマより前の部分を消すとはどのような処理を想定されているのでしょうか?
'b'をbuf2[0]にコピー、その次の','をbuf2[1]にコピー・・といった具合に
ずらしていくのかと思いましたが、" b,c,d"のように最初に見つけた','までを
半角スペースで上書きしたいのでしょうか?

>for(k=0;k<(int)p-(int)buf2;k++){
> strcpy(buf2+k," ");
>}
strcpy()ではナル文字まで書き込まれてしまいます。

また同じ配列の要素を指すポインタ同士の減算は合法です。
逆に (int)p-(int)buf2 のようにキャストしてしまうとまずいはずです。

フリオ

Re:コンマ以前の部分を削除したい

#3

投稿記事 by フリオ » 15年前

 
 こういうことでしょうか。
 
#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[/url] = "a,b,c,d", *p;
    
    puts(s);
    if(p = strchr(s, ',')){
        ++ p;
        memmove(s, p, strlen(p) + 1);
    }
    puts(s);
    return 0; 
}
画像

shiro4ao

Re:コンマ以前の部分を削除したい

#4

投稿記事 by shiro4ao » 15年前

なるほど!
メモリブロックの移動の関数があるのですね
ありがとうございました。無事解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る