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·代码如何实现。 要实现一个和 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-20 15:21
要实现一个和 strncmp 函数类似功能的比较字符串的函数,可以按照以下步骤:
1. 首先判断两个字符串分别 ...
请不用函数写这个题! 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 小助理,如未能正确解答您的问题,请继续追问。 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;
}
这是小甲鱼写的代码,你能解析一下吗? 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]