C言語関係掲示板

過去ログ

No892 "a a","i i","u u"の文字列があったら、"aa","ii","uu"に書き換える

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

文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---z(2003/10/06 23:39:35)


例えば、文字列中に"a a","i i","u u"の文字列があったら、"aa","ii","uu"に書き換えするプログラムを作りたいです。

No.501

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---ともじ(2003/10/08 16:10:16)


こんにちは。

>例えば、文字列中に"a a","i i","u u"の文字列があったら、"aa","ii","uu"に書き換えするプログラムを作りたいです

これだけでは、情報が少なすぎます。単に、"a a","i i","u u"
を、"aa","ii","uu"に書き換えるだけですか。それとも、
"a" のときにも "a" にするのですか。"a","i","u" 以外は
どうするのですか。大文字の"AA" も考えるのですか。
それから、文字コードはシフトJISでいいのですか。
ご質問は可能な限り具体的にお願いします。

No.510

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---z(2003/10/09 11:57:10)


ご返事いただいてありがとうございます。

さて、

>>例えば、文字列中に"a a","i i","u u"の文字列があったら、"aa","ii","uu"に書き換えするプログラムを作りたいです

文字列の中に例えば、"i e a a o a i u u o u"とすると、"i e aa o a i uu o u"にしたいです。

aの後はaだったら、"aa"にして、別の文字だったら、そのままにします。
uの後はuだったら、"uu"にして、別の文字だったら、そのままにします...

今書き換えしたいのは"a","i","u","e","o"5種類だけです。
大文字の場合はないですから、考えなくていいです。

文字コードはシフトJISでいいのです。


No.511

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---ほげ(2003/10/09 13:42:54)


K a a K i i K u u K e e k o o
このような場合はどうなってほしいですか?

No.512

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---z(2003/10/09 14:18:55)


K a a K i i K u u K e e k o o

K aa K ii K uu K ee K oo
にしたいです。

No.513

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---まり(2003/10/09 14:29:34)


入力文字列は、必ず空白で1文字づつ分割されているのでしょうか?

また、同じ文字が3個以上続いたら?
"a a a a"だったら、"aaaa"に変換すれば良いのでしょうか?
それとも、2文字づつに分けて"aa aa"でしょうか?
または、入力文字列は3文字以上続いて現れないとか?


No.515

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---z(2003/10/09 15:11:08)


入力文字列は、必ず空白で1文字づつ分割されています。

入力文字列は3文字以上続いて現れないです。



No.516

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---まり(2003/10/09 16:03:57)


入力文字列は、3文字以上同じ文字が続いて現れないのであれば(2文字まで)、
かずまさんが提示してくれているのでOKですね。

ちまちま質問しただけで、ごめんなさい。


No.514

Re:文字列から指定文字列を、別の指定文字列に書き換えするプログラムにしたいです
投稿者---かずま(2003/10/09 14:43:47)


> 例えば、文字列中に"a a","i i","u u"の文字列があったら、
> "aa","ii","uu"に書き換えするプログラムを作りたいです。
#include <stdio.h>
#include <string.h>

void replace(const char *s, char *t)
{
    while (*t++ = *s++)
        if (strchr("aiueo", s[-1]) && s[0]==' ' && s[1]==s[-1])
            s++, *t++ = *s++;
}

int main(void)
{
    char buf[1024], buf2[1024];

    while (fgets(buf, sizeof buf, stdin)) {
        replace(buf, buf2);
        fputs(buf2, stdout);
    }
    return 0;
}