C言語関係掲示板

過去ログ

No.425.特定文字を検索し、存在したら置き換える

[戻る] [ホームページ]
No.2962

特定文字を検索し、存在したら置き換えたい!
投稿者---ヒナコ(2002/10/17 20:16:10)


はじめまして。
C言語初心者で、困り果てています。

やりたい事は、ある文字列から、シングルコーテーションを検索し、
存在したら、シングルコーテーションを2個にして、バッファに格納
したいのです。

strcpy(str1,"はじ'めま'して");
 ・
 ・何かの処理をする
 ・
 ↓
str1には、「はじ''めま''して」と入っている。

どなたか、お力を貸してください。
よろしくお願い致します。



No.2967

Re:特定文字を検索し、存在したら置き換えたい!
投稿者---TDa(2002/10/17 23:20:01)


こんな感じでどうでしょ。

#include <stdio.h>

int replace(char *s, char c1, char c2);

int main(void)
{
    char buf[] = "はじ'めま'して";
    
    printf("使用前 : %s\n", buf);
    replace(buf, '\'', '"');
    printf("使用後 : %s\n", buf);

    return 0;
}

int replace(char *s, char c1, char c2)
/** ==============================
 * 文字列s中のc1をc2に置き換える。
 * 置き換えた個数を返す。
 * =============================== */
{
    int cnt_replace = 0;
    
    for (; *s != '\0'; s++) {
        if (*s == c1) {
            *s = c2;
            cnt_replace++;
        }
    }

    return cnt_replace;
}


No.2979

Re:特定文字を検索し、存在したら置き換えたい!
投稿者---TDa(2002/10/18 07:20:22)


>こんな感じでどうでしょ。
>
よく文を読み返すとシングルクオーテーションを2つにすると言うことのようですね。

それだと私のコードではダメです。

No.2969

Re:特定文字を検索し、存在したら置き換えたい!
投稿者---kamadoma(2002/10/17 23:45:59)


>はじめまして。
>C言語初心者で、困り果てています。
>
>やりたい事は、ある文字列から、シングルコーテーションを検索し、
>存在したら、シングルコーテーションを2個にして、バッファに格納
>したいのです。
>
>strcpy(str1,"はじ'めま'して");
> ・
> ・何かの処理をする
> ・
> ↓
>str1には、「はじ''めま''して」と入っている。
>
>どなたか、お力を貸してください。
>よろしくお願い致します。
>
#include <stdio.h>
#include <string.h>

int main(void)
{
	char str[256];
	char *p;
	char col[10][256];
	int i = 0;
	int j = 0;
	int k;
	char temp[256];
	char result[256];

	strcpy(str,"はじ'めま'して");
	strcpy(result,"");
	
	p = str;

	/*文字'を区切り文字として、カラムを取得する*/
	while(*p != '\0'){
		if(*p != '\''){
			col[i][j] = *p;
			j++;
		}
		else{
			col[i][j] = '\0';
			i++;
			j = 0;
		}
		p++;
	}

	
	/*取得したカラムの数分編集を繰り返す*/
	for(k=0;k<=i;k++){
		/*最後のカラムの処理でないとき,文字''を付加*/
		if(k!=i){
			sprintf(temp,"%s''",col[k]);
		}
		/*最後のカラムのときは、文字''をつけない*/
		else{
			sprintf(temp,"%s",col[k]);
		}

		/*連結処理*/
		strcat(result,temp);
		
	}

	/*結果表示*/
	printf("result = %s\n",result);

	return 0;
}




No.2973

Re:特定文字を検索し、存在したら置き換えたい!
投稿者---かずま(2002/10/18 03:01:40)


> やりたい事は、ある文字列から、シングルコーテーションを検索し、
> 存在したら、シングルコーテーションを2個にして、バッファに格納
> したいのです。

#include <stdio.h>
#include <string.h>

#define QUOTE  '\''

void duplicate_quote(char *s)
{
    char *t;  int i;

    for (i = 0; *s; s++)
        if (*s == QUOTE) i++;
    for (t = s + i; ; s--, t--) {
        if (*s == QUOTE) {
            *t = QUOTE;  *--t = QUOTE;  i--;
        } else
            *t = *s;
        if (i == 0) break;
    }
}
    
int main()
{
    char str1[256];

    strcpy(str1, "はじ'めま'して");
    duplicate_quote(str1);
    puts(str1);
    return 0;
}


No.2976

Re:特定文字を検索し、存在したら置き換えたい!
投稿者---かずま(2002/10/18 03:19:19)


for ループの中で、毎回 if (i == 0) を実行するのは無駄ですね。
--i を実行したときのみ、i が 0 かどうかチェックすることにしましょう。
void duplicate_quote(char *s)
{
    char *t;  int i;

    for (i = 0; *s; s++)
        if (*s == QUOTE) i++;
    if (i == 0) return;
    for (t = s + i; ; s--, t--)
        if (*s == QUOTE) {
            *t = QUOTE;  *--t = QUOTE;
            if (--i == 0) return;
        } else
            *t = *s;
}


No.2985

ありがとうございました
投稿者---ヒナコ(2002/10/18 13:17:14)


TDaさん、kamadomaさん、かずまさん、本当にありがとうございました。
とても助かりました。

結局、かずまさんのを参考に、プログラミングして、
ちゃんと出来ました。
パーフェクトです。

また分からない事があった時は、助けて下さい。
よろしくお願い致します。