#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int erase_once(char *input_string, const char *substring, int case_sensitive) {
size_t string_length = strlen(input_string);
size_t substring_length = strlen(substring);
if (string_length < substring_length || substring_length == 0) return 0;
size_t i;
for (i = 0; i < string_length - substring_length + 1; i++) {
int match_found = 1;
for (size_t j = i; j < i + substring_length; j++) {
if ((case_sensitive == 0 &&
tolower(input_string[j]) != tolower(substring[j-i])) ||
input_string[j] != substring[j-i]) {
match_found = 0;
break;
}
}
if (!match_found) continue;
for (; i < string_length - substring_length; i++) {
input_string[i] = input_string[i + substring_length];
}
input_string[i] = '\0';
return 1;
}
return 0;
}
int erase(char *input_string, const char *substring, int case_sensitive) {
int count;
for (count = 0; erase_once(input_string, substring, case_sensitive); count++);
return count;
}
int main(void) {
char main_string[] = "abcdef cde AbCDE";
const char *substring_to_erase = "abc";
erase(main_string, substring_to_erase, 0);
printf("%s\n", main_string);
return 0;
}
字符串
我尝试通过设置变量int case_sensitive来使其区分大小写;当变量为0时,它不敏感,当它为1时,它区分大小写,因此例如:对于输入“abcdef cde AbCDE”和子字符串“abc”,如果它为1,则应返回-“def cde AbCDE”;对于相同的input和case_sensitive设置为0,它应该返回“def cde DE”另一个例子是对于字符串xYXyXYXY和子字符串xy和sensitive设置为0,它应该返回空字符串
但是没有,你能帮我找出错误吗?
3条答案
按热度按时间xcitsw881#
你刚刚忘记检查是否case_sensitive==1,其他明智的它将总是你的'if条件'的后半部分将被检查和考虑.这是你需要编辑的行
字符串
注:如果你的解决方案过于复杂,而且你的代码不够干净,这些技巧将帮助你识别任何问题,并使你易于调试
jobtbby32#
将任务分解为更小的部分
字符串
https://godbolt.org/z/M7bh8Pq7a
3yhwsihp3#
1函数内的所有内容:
字符串
结果:
型