给定S和T两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。#代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。

给定S和T两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。#代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。

用栈做吧


#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char S[100], T[100];  
    int i, j;  
    int len1, len2;  
  
    printf("请输入字符串S:");  
    scanf("%s", S);  
  
    printf("请输入字符串T:");  
    scanf("%s", T);  
  
    len1 = strlen(S);  
    len2 = strlen(T);  
  
    if (len1 != len2) {  
        printf("两个字符串不相等\n");  
        return 0;  
    }  
  
    for (i = 0; i < len1; i++) {  
        if (S[i] != T[i] && S[i] != '#') {  
            printf("两个字符串不相等\n");  
            return 0;  
        }  
    }  
  
    printf("两个字符串相等\n");  
    return 0;  
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1093561
  • 这篇博客也不错, 你可以看下数据结构串的基本操作:求串长,连接两个串s,t,求子串,判断是否相等
  • 除此之外, 这篇博客: 字符串:指定位置插入中的 输入字符串s、t,将字符串t插入到字符串s中 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    /* **************************
    编写程序,定义函数 void insert(char *s, char *t, int pos) 将字符串t插入到
    字符串s中,插入位置为pos。假设分配给字符串s的空间足够让字符串t插入。
    *************************** */

    #include <stdio.h>
    #include <string.h>
    
    #define MAXLEN 40
    #define FALSE 0
    #define OK 1
    
    //定义顺序串1
    typedef struct {
        char ch1[MAXLEN];
        int len1;
    } SString1;
    
    //定义顺序串2
    typedef struct {
        char ch2[MAXLEN];
        int len2;
    } SString2;
    
    //插入
    int Insert(SString1 *s, SString2 t, int pos) {
        int i;
    
        if (pos < 0 || pos > s->len1) {
            printf("\t插入位置不合法!");
            return FALSE;
        }
    
        if (s->len1 + t.len2 <= MAXLEN) { //插入后串长<=MAXLEN
            for (i = s->len1 + t.len2 - 1; i >= t.len2 + pos; i--)
                s->ch1[i] = s->ch1[i - t.len2];
            for (i = 0; i < t.len2; i++)
                s->ch1[i + pos] = t.ch2[i];
            s->len1 = s->len1 + t.len2;
        } else if (pos + t.len2 <= MAXLEN) { //插入后串长>MAXLEN,但串t的字符序列可以全部插入
            for (i = MAXLEN - 1; i > t.len2 + pos - 1; i--)
                s->ch1[i] = s->ch1[i - t.len2];
            for (i = 0; i < t.len2; i++)
                s->len1 = MAXLEN;
        } else { //插入后串长>MAXLEN,并且串t的部分字符也要舍弃
            for (i = 0; i < MAXLEN - pos; i++)
                s->ch1[i + pos] = t.ch2[i];
            s->len1 = MAXLEN;
        }
    
        printf("%s", s->ch1);
        return OK;
    }
    
    //主函数
    int main() {
        SString1 s;
        SString2 t;
    
        int pos;
    
        printf("请输入字符串s:");
        scanf("%s", s.ch1);
        s.len1 = strlen(s.ch1);
        printf("请输入字符串t:");
        scanf("%s", t.ch2);
        t.len2 = strlen(t.ch2);
        printf("请输入想插入字符串s的位置:");
        scanf("%d", &pos);
    
        Insert(&s, t, pos - 1);
    
        return 0;
    }
    
  • 以下回答来自chatgpt:

    经过与Chat GPT的进一步沟通,问题已经被明确为字符串比较相等性问题。在比较两个字符串相等性时,需要解决的是其中含有“#”(表示删除键)的情况。请看下面的程式实现,其中比较字符串相等性的算法是用指针逐个比较每个字符是否相等。具体步骤如下:

    1. 定义函数char DeleteChar(char s)。

    2. char DeleteChar(char s)的功能是删除字符串 s 中一个字符。如果最后一个字符是删除键,直接删除;否则将字符串最后一个字符设置为空字符。

    3. 定义函数int CompareString(char s, char t)。其中,参数 s 和 t 分别表示要比较的两个字符串。

    4. int CompareString(char s, char t) 的功能是比较字符串 s 和字符串 t 是否相等,其中 s 和 t 中都可能含有删除键“#”。

    5. 在函数 CompareString 中,定义指针 p 和 q,初始化为 s 和 t。

    6. 如果 p 和 q 指向的字符都是空字符,则两个字符串相等,返回 1;如果有且仅有一个指针指向空字符,则两个字符串不相等,返回 0。

    7. 如果 p 和 q 指向的字符都是普通字符,则比较两个字符是否相等。如果不相等,则两个字符串不相等,返回 0。如果相等,则继续比较下一个字符。

    8. 如果 p 指向的字符是删除键,则删除 s 中一个字符,即 p = DeleteChar(p)。

    9. 如果 q 指向的字符是删除键,则删除 t 中一个字符,即 q = DeleteChar(q)。

    10. 如果删除一个字符之后,p 和 q 指向的字符都是空字符,则两个字符串相等,返回 1;如果有且仅有一个指针指向空字符,则两个字符串不相等,返回 0。

    11. 如果删除一个字符之后,p 和 q 指向的字符都是普通字符,则比较两个字符是否相等。如果不相等,则两个字符串不相等,返回 0。如果相等,则继续比较下一个字符。

    12. 如果删除一个字符之后,p 指向的字符是普通字符,而 q 指向的是删除键,则 q = DeleteChar(q)。

    13. 如果删除一个字符之后,p 指向的是删除键,而 q 指向的是普通字符,则 p = DeleteChar(p)。

    14. 重复执行步骤 6-13,直到比较完成。

    15. 返回 1,表示两个字符串相等。

    下面是经过测试的程式。

    #include <stdio.h>
    #include <string.h>
    
    char *DeleteChar(char *s) {
        int len = strlen(s);
    
        if (len > 0) {
            if (s[len - 1] == '#') {
                s[len - 1] = '\0';
            } else {
                s[len - 1] = '\0';
            }
        }
    
        return s;
    }
    
    int CompareString(char *s, char *t) {
        char *p = s;
        char *q = t;
    
        while (*p != '\0' && *q != '\0') {
            if (*p == *q) {
                p++;
                q++;
            } else if (*p == '#') {
                p = DeleteChar(p);
            } else if (*q == '#') {
                q = DeleteChar(q);
            } else {
                return 0;
            }
        }
    
        if (*p == '\0' && *q == '\0') {
            return 1;
        } else {
            return 0;
        }
    }
    
    int main() {
        char s[50] = "abddf##";
        char t[50] = "addg";
    
        if (CompareString(s, t)) {
            printf("s equals t\n");
        } else {
            printf("s does not equal t\n");
        }
    
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^