编写函数int backspace_compare(char* s, char* t),给定 s 和 t 两个字符串,如果两者相等,返回 1,不相等返回0,异常返回-1 。字符串中 # 代表退格字符。 注意:如果对空字符串输入退格字符,字符串继续为空。 示例 1: 输入:s = "ab#c", t = "ad#c" 输出:1 解释:s 和 t 都会变成 "ac"。 示例 2: 输入:s = "ab##", t = "c#d#" 输出:1 解释:s 和 t 都会变成 ""。 示例 3: 输入:s = "a#c", t = "b" 输出:0 解释:s 会变成 "c",但 t 仍然是 "b"。 提示: 字符串长度小于80; s 和 t 只含有小写字母以及字符 '#' 只提交函数和相应的编译预处理指令,无需提交主函数;
说白了也就是翻译,把字符串中退格的含义翻译好,然后用一下strcmp函数即可
up被这道题卡了两个小时,原因如下:
1,return -1的情况:s==NULL
2,退格时,若现在所在位置为字符串的头部,则不做任何操作,所以是有一种情况不做任何操作的。也就是说,条件判断是 if—else if,而不是if—else
上代码:
#include<stdio.h>
#include<string.h>
int backspace_compare(char* s, char* t)
{
if(s==NULL||t==NULL)
{
return -1;
}
char s_[248] = {};
char t_[248] = {};
int cs = 0;
int ct = 0;
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] == '#' && cs != 0)
{
s_[--cs] = '\0';
}
else if (s[i] != '#')
{
s_[cs++] = s[i];
}
}
s_[cs] = '\0';
for (int i = 0; t[i] != '\0'; i++)
{
if (t[i] == '#' && ct != 0)
{
t_[--ct] = '\0';
}
else if (t[i] != '#')
{
t_[ct++] = t[i];
}
}
t_[ct] = '\0';
if (strcmp(s_, t_) == 0)
{
return 1;
}
else
{
return 0;
}
}