• ベストアンサー

C言語でプログラミング。(文字を置き換えるやり方)

scanfなどで入力した文字列(アルファベット)の中にある特定の文字を違う文字に置き換えるようなプログラムってどのように作ったらよいのでしょうか?? 例えば、(sという文字をtと言う文字に変える・・・sound→tound)などのように、入力した文字を置き換えて、もう一度表示するようにするには、どうしたらよいのでしょうか? 関数を使ってプログラムを作りたいと思っているのですが・・・ なにかヒントなどがあったらお願いします。

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

  • ベストアンサー
noname#16765
noname#16765
回答No.6

返答がないので答えみたいなの書いちゃいます。 関数じゃないけど単純に・・・ #include <stdio.h> #include <string.h> int main(void) { char *text = "sound"; char *text2 = "souns"; char *p; printf("%s\n",text); while((p = strchr(text,'s')) != '\0') *p ='r'; printf("%s\n",text); printf("%s\n",text2); while((p = strchr(text2,'s')) != '\0') *p ='r'; printf("%s\n",text2); return 0; } で、いいんじゃない?

bonkare-
質問者

お礼

ありがとうございます。 自分でもなんとか作ることができたのですが、今後の参考にさせていただきます!!

その他の回答 (5)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> sという文字をtと言う文字に変える・・・sound→tound 全角文字に対応したいのであれば、 scanf("%ls", wcs); のようにワイド文字列として入力して処理する必要があるかと思います。 あとは、 const wchar_t *p = wcschr(wcs, L's'); if (p != NULL)  *p = L't'; といった具合に置換を行います。 ちなみに、strchrもwcschrも、文字が見つからなかった場合は(ナル文字ではなく)空ポインタ定数(=NULL)を返します。

bonkare-
質問者

お礼

ありがとうございます。分かりやすくてためになりました!!

noname#16765
noname#16765
回答No.4

>>なにかヒントなどがあったらお願いします。 というわけでヒントだけにします。 1.BLUEPIXYさんのものにループをつける。 2.strchr関数は見つからなかったら'\0'を返す。 でいけると思います。

bonkare-
質問者

お礼

ありがとうございます!! とても参考になります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#include <stdio.h> #include <string.h> int main(void){ char *text = "sound"; printf("%s\n",text); *strchr(text,'s')='r'; printf("%s\n",text); return 0; }

bonkare-
質問者

お礼

こうゆうやり方もあるんですね。 参考にさせていただきます。 ありがとうございます!!

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

fscanf()じゃなくstrcmp()とかの方が、考え方簡単ですね。 ちょっと間違えた関数を書いてしまいました。

bonkare-
質問者

お礼

そうだったんですか!!ありがとうございます。

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

ま、どういうアドバイスをすればいいのか分りませんが fscanf()とかで引っ掛けて、その文字列内のバッファを書き換えても良し、元のデータ壊したくないなら入力されたバッファ分mallocしてそれから書き換えても良し。(使い終わったら明示的にfree()する必要有りますが。) 好きに作ってください。但し、入力値はチェックすること(入力された文字列が、NULLポインタだったら処理しないとか)

参考URL:
http://www.orchid.co.jp/computer/cschool/str1.html
bonkare-
質問者

お礼

ありがとうございます。参考にさせていただきます!!

関連するQ&A

  • C言語のプログラミングについてです。

    C言語のプログラミングについて教えて欲しいです。 scanf関数を用いて、キーボードから文字列(最大30文字)を読み込み、これをchar型配列に格納します。最大10個までの文字列が入力された場合か、「END」が入力された時、入力された逆順で画面に表示するプログラム。作成しなさい。 〈完成例〉 adjm 10mdjp jpd-4 njad' END njad jpd-4 10mdjp adjm

  • このプログラミングの宿題を教えてください。

    「アルファベット4文字を半角で文字列として入力します。4文字のコードを足しあわせ,その結果を10進数で表示します。さらに,百の位,十の位,一の位に分けて表示するようにプログラムを作りましょう。」という宿題です。 main( ) { char s[6]; printf("4文字を入力してください:"); scanf("%s",s); } ここまでできたんですが、そのあとが分かりません。 回答よろしくお願いします。

  • プログラミングC

    以下に示すプログラムは、キーボードから39文字以下の文字列を入力した後で、その文字列を表示するプログラムである。ただし、文字列の表示においては、printf命令における変換指定で、%sを使用するのが一般的であるが、以下のプログラムあえて%sを使用せずに、%cを使っている。このプログラムについてキーボードから入力される文字列の文字数が391文字以下である限り、その文字列を正しく表示できるよう、下線部を埋めてプログラムを完成させなさい。 char x[40],i printf("39文字以下の文字列を入力:"); scanf("%s",x); for(i=0;x[i]_____;i++) printf("%c",x[i]); printf("です。\n"); [実行例] 39文字以下の文字列を入力:programming 入力された文字列はprogrammingです。

  • C言語のプログラミングですが、

    C言語のプログラミングですが、 255文字以内の文字列をキーボードから入力して、下記の各処理を行うプログラム(※入力した文字データは配列に入力)はどのようにしたらいいでしょうか?(入力例:acFNkeexFFg) ・入力した文字列の最後の文字を出力 ・入力した文字列⇒逆に並べ替えて出力 ・入力した文字列⇒縦に出力(1文字ずつ) ・入力した文字列の中に「F」が何個あるか ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 … char str[255]; int i,n,na,nb,nc; printf("Input Strings= "); scanf("%s",str); for(i=0;str[i]!='¥0';i++){ n=i; } printf("The last character= %c",str[n]); くらいまでしか分かりません…

  • Cプログラミングについて

    XP環境でVisual C++2008を使ってC言語の プログラミングをしています。 キーボードから複数回読み込み、長い文字列を作るというものです。 例) >>文字列を入力 >>abc >>今まで入力された文字列を表示 >>gsfgsdfgjfsdabc 配列、ポインタ、メモリの確保を行う事がヒントとして与えられています。 これを実現するために以下のようなプログラムを組んでみました。 int InputCount=0; char InputStr[10]; char *OutputStr[5]; int i=0; while(InputCount<5){ printf("文字列を入力してください\n"); scanf("%s",InputStr); OutputStr[InputCount]=(char*)malloc(strlen(InputStr)+1); OutputStr[InputCount]=InputStr; printf("今までに入力された文字を表示します\n"); for(i=0;i<=InputCount;i++){ printf("%s",OutputString[i]); } printf("\n"); InputCount++; } このように組んでみたのですが、うまくいきませんでした。 これでは一度入力した文字列の内容を 保持する事ができないようです。 根本的にアルゴリズムが悪いのではないかとも考えていますが、どうするのが良いのかわかりません。 初心者なので至らない点、情報不足があればご指摘願います。 これではなぜ無理なのか、またどのようなアプローチが良いのかご教授よろしくお願いします。

  • C言語でのプログラミングについて

    キーボードから入力された文字列に含まれる各文字の個数を出力するプログラムを作成せよ。 条件 ・対象とする文字は英字の小文字のみでよい ・文字列の長さは100文字まで対応できるようにせよ 例 $ ./a.out input:aaabtzz a:3 b:1 t:1 z:2 という問がわかりません。 プログラムの例(C言語)と出来れば解説もご教授ください。 ※大学で一年c言語をやった程度なので難しいことや高度なテクニックはわかりません。多少面倒でも初歩的な知識だけで理解できるようにお願いします。 #include<stdio.h>内でできるものでお願いします。 以下、自分なりに考えたものです。 #include<stdio.h> int main(void) { char a[100]; printf("input:"); scanf("%100s",a); (ここからがわかりません) return 0; } 本当に困っています。ご教授お願いします。

  • C言語

    (a) キーボードから入力された文字列をそのままディスプレイに表示するプログラムを作成しなさい。 という問題 #include<stdio.h> main() { char word[1000]; /*文字型の変数の宣言*/ scanf("%s", word); /*キーボードから文字列を入力*/ printf("%s\n", word); /*入力した文字列を出力*/ } と作りましたがこれではコンソール中で文字を打ってからエンターを押さないといけないからといわれ再提出になってしまいました。 エンターを押さないでそのまま出力するということは、できるのでしょうか? あと自分の作ったプログラムではスペースや改行を使うことができないから使えるようにしろと言われてましたがそれわできますか? 変換仕様をかえればいいのですか ほかにもかえる所はありますか?

  • Cのプログラミングについて

    入力した半角のアルファベットが大文字なら小文字で,小文字なら大文字で表示するプログラムを作り, また,半角のアルファベット以外の文字が入力された場合は,「入力エラー」と表示するプログラムを作りたいんですけど,作ってもうまく動作してくれません。簡単だとは思うんですがお願いします。

  • プログラミング言語C 参考書

    大学一年の者です。 大学の前期の授業でプログラミング言語Cの基礎を学び、 夏休みに自分なりに勉強をしようと思ったのですが どの参考書が自分に合っているのかわからず、質問いたしました。 授業で習ったこと ・四則計算 ・if while for 文 ・ソート ・関数の概念 ・ポインタの基礎 ・文字列の基礎 ・ファイルの入出力 です。 上記に関係する簡単なプログラムなら組むことができます。 ・入力した複数の数字をソートして表示する。 ・ファイルの中の小文字のアルファベットを大文字で表示する。など こんな自分に合った書籍がありましたら、アドバイスよろしくお願いいたします。 また 余談ですが 友人のプログラムは実行すると 日本語が表示されていました。 「桁数が足りていません。」「桁数が多すぎます」など これはASCIIコードか何か使用しているのでしょうか?? 長々となってしまいましたが よろしくお願いいたします。

  • C言語のアルゴリズムについて

    C言語で「標準入力から英語の文章を読み込んで,文字列Ilmorが出現した行をその行番号とともに表示するプログラムを作りなさい.」とプログラムを作りたいのですが、文字列を発見するところまでは分かるのですが、その行どうやって表示すればいいのか分かりません。また、文章を読み込むのもすごくややこしく最後にエンターを二回押すなどの制限があります。(scanf) 参考になるプログラムを書いていただける方いませんか?できればC言語のアルゴリズムについて詳しく書いた本やサイトがあれば教えていただきたいです。 レベルは超入門的な本を2,3冊読んだ程度です。アルゴリズムなどにはまったく触れてなかったし、ライブラリー関数も少ししか載ってなかったので関数の本もあれば教えていただきたいです。

専門家に質問してみよう