只用c语言,不用c++,写一个函数int f(char*s1,char*s2),按字典顺序比较字符串s1和s2的大小,如果sl>s2返回整数,ssl=s2返回0,sl<s2返回负数,要求不能使用strcmp函数。
时间: 2023-08-03 21:04:53 浏览: 86
可以使用指针进行比较,逐一比较两个字符串的每个字符,直到出现不同的字符或者有一个字符串结束为止。以下是代码实现:
```c
int f(char* s1, char* s2) {
while (*s1 == *s2) {
if (*s1 == '\0') return 0;
s1++;
s2++;
}
return *s1 - *s2;
}
```
在函数中,首先通过 while 循环逐一比较两个字符串的每个字符。如果两个字符相等,则继续向后比较,直到出现不同的字符或者有一个字符串结束为止。如果两个字符串完全相等,则返回 0。
如果出现不同的字符,则比较它们的 ASCII 码值大小。如果 s1 的字符比 s2 的字符大,则返回一个正整数;如果两个字符相等,则继续比较下一个字符;如果 s1 的字符比 s2 的字符小,则返回一个负整数。
注意,函数的参数应该是指向字符串的指针,而不是数组。因为指针可以根据需要移动,而数组的长度是固定的。
相关问题
编写函数实现连个字符串的比较函数原型为int scmp(char *s1,char *s2)
在C语言中,编写一个名为`scmp`的函数,用于比较两个字符串`s1`和`s2`,通常我们会考虑字符串的内容、长度以及结束标志`\0`。函数原型如下:
```c
#include <stdbool.h> // 引入stdbool_t以支持比较结果
int scmp(char* s1, char* s2) {
// 检查字符串是否为空,空字符串视为小于非空字符串
if (!s1 && !s2) {
return 0; // 若两者都为空,则相等
} else if (!s1 || !s2) {
return s1 ? -1 : 1; // 若其中一个为空,非空的那个更大
}
// 使用while循环逐个字符对比,直到遇到'\0'或者一个字符串结束
while (*s1 == *s2) { // 相同字符继续比较
s1++;
s2++;
}
// 如果*s1已经到达'\0',说明s1比s2短
if (*s1 == '\0') {
return -1;
}
// 否则,*s2已达到'\0',说明s2比s1短
else {
return 1;
}
}
// 示例用法
int main() {
char* str1 = "apple";
char* str2 = "banana";
int comparison = scmp(str1, str2);
if (comparison > 0) {
printf("%s is greater than %s.\n", str1, str2);
} else if (comparison < 0) {
printf("%s is less than %s.\n", str1, str2);
} else {
printf("%s is equal to %s.\n", str1, str2);
}
return 0;
}
```
`scmp`函数会比较两个字符串内容,如果完全相等则返回0,若第一个字符串较短则返回-1,反之返回1。
编写函数strlink(char *s1,char *s2)将s2所指向的字符串连接至s1所指向的字符串之后
在C语言中,你可以编写一个名为`strlink`的函数,它接受两个字符指针`s1`和`s2`作为输入参数,然后通过动态内存分配和字符串拼接的操作,将`s2`指向的字符串连接到`s1`指向的字符串后面。以下是一个简单的示例实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* strlink(char* s1, char* s2) {
// 首先检查s1是否为空,如果为空则直接返回s2
if (!s1) {
return strdup(s2); // 如果s1为空,复制s2并返回
}
// 计算s1和s2的总长度
size_t total_len = strlen(s1) + strlen(s2) + 1; // 加一用于终止符'\0'
// 动态分配足够的空间存放结果
char* result = (char*) malloc(total_len * sizeof(char));
// 将s1复制到结果中
strcpy(result, s1);
// 将s2添加到结果的末尾
strcat(result, s2);
return result;
}
// 示例用法
int main() {
char* str1 = "Hello";
char* str2 = "World!";
char* linked_str = strlink(str1, str2);
printf("Linked string: %s\n", linked_str);
free(linked_str); // 注意释放动态分配的内存
return 0;
}
```
在这个例子中,`strlink`函数会合并两个字符串并将结果返回给调用者。当程序结束时,记得释放之前动态分配的内存以防止内存泄漏。
阅读全文