liyifeng295641 发表于 2024-1-20 15:21:04

C语言字符串处理函数01

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

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

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

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

具体实现如下图所示:

https://xxx.ilovefishc.com/forum/201604/07/041130ky0xxzyza794nizy.png

@FishC·代码如何实现。

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 == s2) {
      // 继续比较下一个字符直到遇到不同的字符或达到指定的比较长度
      if (s1 == '\0')
            return 0; // 字符串相等,返回 0
      i++;
    }
   
    // 比较结果根据差值返回相应的正数或负数
    return s1 - s2;
}

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 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-1-20 15:22:40

FishC 发表于 2024-1-20 15:21
要实现一个和 strncmp 函数类似功能的比较字符串的函数,可以按照以下步骤:

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

请不用函数写这个题!

FishC 发表于 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 != '\0' && s2 != '\0' && i < n; i++) {
      if (s1 != s2) {
            result = s1 - s2;
            break;
      }
    }

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

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

    return 0;
}

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

最后,输出比较结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-1-20 20:30:34

FishC 发表于 2024-1-20 15:23
好的,那我们不使用函数来实现字符串比较的功能。

下面是一个简单的示例代码:


#include <stdio.h>

#define MAX 1024

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

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

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

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

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

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

      return 0;
}

这是小甲鱼写的代码,你能解析一下吗?

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言字符串处理函数01