【C言語】文字列の中で文字列の置き換え作業をしたい
Q&A
Closed
「1行の文字列が標準入力によって入力された時、その文字列に含まれる「yes」を「no」に置き換えて出力するプログラム」を考えていました。
例:
「yes i do not」→「no i do not」
「employees」→「employees」
「superyesman」→「supernoman」
僕がコンパイル・実行した最後のプログラムが以下のものです。
#include <stdio.h>
#include <string.h>
int main(){
char buf[1000];
char s[100];
char wrong_str[]="yes";
char part[100]="";
char head[100]="";
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%s", s);
int j,k;
//③①がつきあたりに行くまで行う
int count=0;
int past_wrong_count=0;
while(count<strlen(s)-strlen(wrong_str)-1){
//①Falseの文字数分だけsから文字を順番に抜き取った文字列partを作り…
for(j=0;j<strlen(wrong_str);j++){
char chr[2];
sprintf(chr,"%c",s[count+j]);
strcat(part,chr);
}
//②文字列一致するか調べる作業を
int ret=strcmp(part,wrong_str);
if(ret==0){
for(k=past_wrong_count;k<count;k++){
char chc[2];
sprintf(chc,"%c",s[k]);
strcat(head,chc);
}
strcat(head,"no");
past_wrong_count=count+strlen(wrong_str);
count=count+strlen(wrong_str);
}else{
char chc[2];
sprintf(chc,"%c",s[count]);
strcat(head,chc);
count++;
}
}
printf("%s\n",head);
}
実行結果は全くの期待外れで、色々と試行錯誤をしてみたものの、糸口が掴めないどころか煩雑化して考える要素がさらに増えたため、この考え方ではそもそも駄目なんだと思い 堪らずギブアップしてしまいました。
このプログラムを考えるだけで何日もかかっていて、一人では解決出来ず、インターンを間近にして非常に危機感を感じています。
このような「ある文字列に含まれる特定の文字列Aを、Aとは字数の異なる別の文字列Bに置き換えるプログラム」に対し、最もシンプルで考えやすい手段があれば是非知りたいです。また、文字列のM番目からN番目 (特にM≠1かつM<Nの場合) までの文字の並びを調べたい時 (文字列一致の判断等に使えるかと) に有効な方法もご教授頂きたいです。