数据结构C语言字符串

编写函数实现串S和串T的比较操作,要求比较结果包括大于、下于和等于三种情况

基于new bing的编写:
参考学习哈

#include <stdio.h>
#include <string.h>

int stringCompare(char s[], char t[]) {
    int i = 0;

    // 迭代比较每个字符
    while (s[i] == t[i]) {
        if (s[i] == '\0' || t[i] == '\0')
            break;
        i++;
    }

    // 判断比较结果
    if (s[i] == '\0' && t[i] == '\0')
        return 0; // 两串相等

    if (s[i] < t[i])
        return -1; // 串 S 小于串 T

    return 1; // 串 S 大于串 T
}

int main() {
    char s[] = "abcd";
    char t[] = "abce";

    int compareResult = stringCompare(s, t);

    if (compareResult == 0)
        printf("两串相等");
    else if (compareResult > 0)
        printf("串 S 大于串 T");
    else
        printf("串 S 小于串 T");

    return 0;
}


直接使用strcmp不就实现了吗?还要自己编写该函数?


int cmp(char *s1, char *s2)
{
    while (*s1 && *s2 && *s1 == *s2)
        s1++, s2++;
    return *s1 - *s2;
}

int main()
{
    printf("%d\n", cmp("123", "123"));
    printf("%d\n", cmp("12", "1234"));
    printf("%d\n", cmp("123", "122"));
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7654586
  • 你也可以参考下这篇文章:一个图用邻接表表示,输出从顶点 s 到顶点 t 的所有简单路径
  • 除此之外, 这篇博客: 线性结构之串中的 4. 完成在S串中删除T串的操作 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include "vstring.h"
    
    int deleteSubstring(char *s, char *t);
    
    int deleteSubstring(char *s, char *t) {
        int i = 0, n = 0, k = 0; 
        char tmp[MAXSIZE];
        int res[MAXSIZE];
        char ss[MAXSIZE]; 
    
        strcpy(ss, s);
    
        //如果t的长度比s还大,就出错了
        int len1 = strLength(s);
        int len2 = strLength(t);
    
        if(len1 < len2) {
            return -1;  //出错 
        } 
        //在s中可以划分出len1-len2+1个长度等于t的子串 
        while(i < len1-len2+1) {
            subString(tmp, s, i, i+len2);
    
            if(strCompare(tmp, t) == 0) {
                res[k++] = i;
                strAssign(ss, t);
                n++;
            }
            i++;
        }   
    
        for(i = 0; i < k; i++) {   //输出下标 
            printf("%d ", res[i]);
        }
    
        printf("\n%s\n", ss);
        return n;   
    }
    
    void main(void) {
        char s[MAXSIZE] = "abcdefgbcde78bcde223434bcde99";
        char t[MAXSIZE] = "bcde";
        int num = deleteSubstring(s, t);
        printf("%d\n", num);
    }

    在上面的代码上添加了一些输出的提示内容,结果如下:
    这里写图片描述

    虽然折腾的时间比预期的有点长,但还是实现了,代码下载地址:

    http://download.csdn.net/detail/dear_mr/9815973
  • 以下回答来自chatgpt:

    答案:

    本题需要使用字符串的比较操作,可以使用strcmp函数比较两个字符串的大小,然后根据比较结果表示三种不同的情况。

    比较操作如下所示:

    #include <stdio.h>
    #include <string.h>
    int main(){
        char s[100],t[100];
        int cmp;
        scanf("%s%s",s,t);
        cmp = strcmp(s,t);
        if (cmp > 0) {
            printf("%s大于%s\n",s,t);
        } else if (cmp < 0) {
            printf("%s小于%s\n",s,t);
        } else {
            printf("%s等于%s\n",s,t);
        }
        return 0;
    }
    

    其中,strcmp函数返回值为0表示两个字符串相等,大于0表示第一个字符串大于第二个字符串,小于0表示第一个字符串小于第二个字符串。

    输出结果分别表示三种不同的情况,例如s大于t的情况下输出"s大于t"。

    注:代码中涉及到了字符串输入,需要注意字符串长度的限制,避免数据溢出。


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