鱼C论坛

 找回密码
 立即注册
查看: 994|回复: 5

[已解决]C语言字符串处理函数01

[复制链接]
发表于 2024-1-20 15:21:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
0. 写一个程序模仿 strncmp 函数的实现比较两个字符串 s1 和 s2,需要满足以下要求。

要求 A:如果 s1 > s2,输出一个正数,值是两个不同字符的差;

要求 B:如果 s1 = s2,输出 0;

要求 C:如果 s1 < s2,输出一个负数,值是两个不同字符的差。

具体实现如下图所示:


                               
登录/注册后可看大图


@FishC·代码如何实现。
最佳答案
2024-1-20 15:21:53
要实现一个和 strncmp 函数类似功能的比较字符串的函数,可以按照以下步骤:

1. 首先判断两个字符串分别的长度,如果两个字符串长度不同,则根据长度的差值返回相应的正数或负数即可。

2. 如果两个字符串长度相同,则需要逐个比较字符的 ASCII 值。使用循环遍历字符串中的每个字符,比较对应位置的字符的 ASCII 值大小。

3. 当找到第一个不同的字符时,比较它们的 ASCII 值差值,并返回相应的正数或负数。

4. 如果所有的字符都相同,则返回 0。

下面是一个简单的实现例子:
#include <stdio.h>

int my_strncmp(const char *s1, const char *s2, int n) {
    int i = 0;
    
    while (i < n && s1[i] == s2[i]) {
        // 继续比较下一个字符直到遇到不同的字符或达到指定的比较长度
        if (s1[i] == '\0')
            return 0; // 字符串相等,返回 0
        i++;
    }
    
    // 比较结果根据差值返回相应的正数或负数
    return s1[i] - s2[i];
}

int main() {
    char s1[] = "Hello";
    char s2[] = "World";
    
    int result = my_strncmp(s1, s2, 5);
    
    printf("Comparison result: %d\n", result);
    
    return 0;
}

在这个例子中,我们定义了一个 `my_strncmp` 函数来实现字符串的比较操作。在 `main` 函数中,我们调用了 `my_strncmp` 函数,并输出比较结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-20 15:21:53 | 显示全部楼层    本楼为最佳答案   
要实现一个和 strncmp 函数类似功能的比较字符串的函数,可以按照以下步骤:

1. 首先判断两个字符串分别的长度,如果两个字符串长度不同,则根据长度的差值返回相应的正数或负数即可。

2. 如果两个字符串长度相同,则需要逐个比较字符的 ASCII 值。使用循环遍历字符串中的每个字符,比较对应位置的字符的 ASCII 值大小。

3. 当找到第一个不同的字符时,比较它们的 ASCII 值差值,并返回相应的正数或负数。

4. 如果所有的字符都相同,则返回 0。

下面是一个简单的实现例子:
#include <stdio.h>

int my_strncmp(const char *s1, const char *s2, int n) {
    int i = 0;
    
    while (i < n && s1[i] == s2[i]) {
        // 继续比较下一个字符直到遇到不同的字符或达到指定的比较长度
        if (s1[i] == '\0')
            return 0; // 字符串相等,返回 0
        i++;
    }
    
    // 比较结果根据差值返回相应的正数或负数
    return s1[i] - s2[i];
}

int main() {
    char s1[] = "Hello";
    char s2[] = "World";
    
    int result = my_strncmp(s1, s2, 5);
    
    printf("Comparison result: %d\n", result);
    
    return 0;
}

在这个例子中,我们定义了一个 `my_strncmp` 函数来实现字符串的比较操作。在 `main` 函数中,我们调用了 `my_strncmp` 函数,并输出比较结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-20 15:22:40 | 显示全部楼层
FishC 发表于 2024-1-20 15:21
要实现一个和 strncmp 函数类似功能的比较字符串的函数,可以按照以下步骤:

1. 首先判断两个字符串分别 ...

请不用函数写这个题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-20 15:23:35 | 显示全部楼层
liyifeng295641 发表于 2024-01-20 15:22
请不用函数写这个题!


好的,那我们不使用函数来实现字符串比较的功能。

下面是一个简单的示例代码:
#include <stdio.h>

int main() {
    char s1[] = "Hello";
    char s2[] = "World";
    int n = 5;  // 指定比较的字符个数

    int result = 0;
    int i;

    for (i = 0; s1[i] != '\0' && s2[i] != '\0' && i < n; i++) {
        if (s1[i] != s2[i]) {
            result = s1[i] - s2[i];
            break;
        }
    }

    if (result == 0 && i < n) {
        result = s1[i] - s2[i];
    }

    printf("Comparison result: %d\n", result);

    return 0;
}

这个代码逐个比较了两个字符串的字符,直到遇到不同的字符或者达到指定的比较字符个数。当找到第一个不同的字符时,计算它们的 ASCII 值差值,并将结果赋值给 `result` 变量。如果所有的字符都相同,则通过判断此时的 `i` 是否小于指定的比较字符个数,来确定是否还需要进一步比较。

最后,输出比较结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-20 20:30:34 | 显示全部楼层
FishC 发表于 2024-1-20 15:23
好的,那我们不使用函数来实现字符串比较的功能。

下面是一个简单的示例代码:
#include <stdio.h>

#define MAX 1024

int main()
{
        char str1[MAX];
        char str2[MAX];
        int i = 0;
        unsigned int n;

        printf("请输入第一个字符串:");
        while ((str1[i++] = getchar()) != '\n')
                ;

        printf("请输入第二个字符串:");
        i = 0;
        while ((str2[i++] = getchar()) != '\n')
                ;

        printf("请输入比较的字符数:");
        scanf("%u", &n);

        for (i = 0; i < n; i++)
        {
                if (str1[i] - str2[i])
                {
                        i++;
                        break;
                }
        }

        printf("比较的结果是:%d\n", str1[i-1] - str2[i-1]);

        return 0;
}

这是小甲鱼写的代码,你能解析一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-20 20:32:07 | 显示全部楼层
liyifeng295641 发表于 2024-01-20 20:30
#include

#define MAX 1024

int main()
{
   ...


这段代码是用来实现字符串比较功能的。下面是对代码进行解析:

1. `#include `:头文件包含,使得程序可以使用标准输入输出函数。

2. `#define MAX 1024`:定义了一个常量 MAX,表示字符串的最大长度为 1024。

3. `int main()`:主函数,程序从这里开始执行。

4. `char str1; char str2;`:声明两个字符变量 str1 和 str2,用来存储输入的字符串。

5. `int i = 0;`:初始化一个计数器变量 i。

6. `unsigned int n;`:无符号整型变量 n,用来存储用户输入的比较字符数。

7. `printf("请输入第一个字符串:");`:打印提示消息,要求用户输入第一个字符串。

8. `while ((str1 = getchar()) != '\n') ;`:使用 getchar() 函数逐个读取字符,直到遇到换行符为止,并将读取的字符赋值给 str1。这里使用了一个空循环体,即不做任何操作,只是为了读取完整的一行字符串。

9. `printf("请输入第二个字符串:");`:打印提示消息,要求用户输入第二个字符串。

10. `i = 0; while ((str2 = getchar()) != '\n') ;`:同样地,使用 getchar() 函数逐个读取字符,直到遇到换行符为止,并将读取的字符赋值给 str2。

11. `printf("请输入比较的字符数:");`:打印提示消息,要求用户输入比较字符的数目。

12. `scanf("%u", &n);`:使用 scanf() 函数读取用户输入的无符号整数,并将其赋值给 n。

13. `for (i = 0; i < n; i++)`:使用循环遍历比较字符数目的次数。

14. `if (str1 - str2)`:通过计算两个字符的差值来判断是否不相等。如果差值不为 0,表示字符不相等。

15. `i++; break;`:如果字符不相等,将计数器加一,并使用 break 语句跳出循环。

16. `printf("比较的结果是:%d\n", str1 - str2);`:输出比较结果,即两个字符的差值。

17. `return 0;`:返回程序执行成功的标志。

这段代码实现了从用户输入两个字符串以及比较字符的数目,然后逐个比较两个字符串中对应位置的字符,最后输出比较的结果。需要注意的是,这段代码存在一些问题,例如没有对用户输入的字符串长度进行检查,可能导致超出数组范围的错误。同时,在循环中有一个多余的 `i++` 操作,导致计数器变量的值会多加一。“比较结果是:%d” 中应该使用 `%c` 格式化输出字符结果而不是 `%d`。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 19:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表