前提・実現したいこと
仮引数として文字列s1,s2を受け取り,s1からs2に含まれていない文字をすべて取り除く関数を作成したい.
発生している問題・エラーメッセージ
文字が一致していなければ消す,というコードを??の部分でどのように書けばよいのか分かりません.初心者なので,他に間違っている箇所はあるかもしれないです.
エラーメッセージ
該当のソースコード
c
1 2#include<stdio.h> 3#define NUMBER 101 4int delete(char s1[], char s2[]){ 5 int i, j; 6 for(i = 0; s1[i] != '\0'; i++){ 7 for(j = 0; s2[j] != '\0'; j++){ 8 if(s1[i] != s2[j]){ 9 ?? 10 } 11 } 12 } 13 printf("%s", s1); 14 15 printf("\n"); 16} 17 18int main(void){ 19 char str1[NUMBER]; 20 char str2[NUMBER]; 21 puts("100文字以内の半角文字列を2つ入力してください"); 22 printf("str1:\n"); 23 fgets(str1, NUMBER, stdin); 24 25 printf("str2:\n"); 26 fgets(str2, NUMBER, stdin); 27 28 printf("str1からstr2に含まれていない文字をすべて取り除いた結果、%sになる。\n", delete(str1, str2)); 29 30 return 0; 31} 32ソースコード
試したこと
??の部分でs1[i] = '';としてみたがエラーが出た.
補足情報(FW/ツールのバージョンなど)
emacsを利用しています.
s1 を破壊的に変更する場合、s1 からある文字を取り除くというのは、その文字の後ろにあるものをすべて一つずつ前にずらすことです。(他の言語では破壊的な変更は良くないと言われてますが、C 言語だからなぁ…。)
s1が"teratail"で、s2が"aert"だとすると、"il"はs2に含まれないので、"terata"になるのですよね。"
そうだとすると、そもそも
if(s1[i] != s2[j]){
??
}
のコードでは、s1の最初の文字't'から削除されようとしちゃうのでは?
s1の各文字についてそれがs2に含まれているか、を判定していくのもひとつの方法だと思います。
この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。
回答4件
この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。
あなたの回答
tips
プレビュー