只用c语言,不用c++,写一个函数int f(char*s1,char*s2),按字典顺序比较字符串s1和s2的大小,如果sl>s2返回整数,ssl=s2返回0,sl<s2返回负数,要求不能使用strcmp函数。
时间: 2023-08-03 16:04:53 浏览: 44
可以使用指针进行比较,逐一比较两个字符串的每个字符,直到出现不同的字符或者有一个字符串结束为止。以下是代码实现:
```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 的字符小,则返回一个负整数。
注意,函数的参数应该是指向字符串的指针,而不是数组。因为指针可以根据需要移动,而数组的长度是固定的。
相关问题
C语言,编写程序,设计函数char * insert(char *s1,char *s2,int n),用指针的方式实现在字符串s1中指定的位置n处插入字符串s2。
可以按照以下方式编写函数`insert`实现在字符串`s1`中指定的位置`n`处插入字符串`s2`:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *insert(char *s1, char *s2, int n) {
// 计算插入后的字符串长度
int len1 = strlen(s1), len2 = strlen(s2), len = len1 + len2;
// 为插入后的字符串动态分配内存
char *result = (char *)malloc((len + 1) * sizeof(char));
if (result == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}
// 将s1的前n个字符复制到result中
strncpy(result, s1, n);
// 将s2的所有字符复制到result中
strncpy(result + n, s2, len2);
// 将s1的剩余字符复制到result中
strncpy(result + n + len2, s1 + n, len1 - n);
// 在result末尾添加'\0'
result[len] = '\0';
return result;
}
int main() {
char s1[100], s2[100];
int n;
printf("Please enter the string s1: ");
gets(s1);
printf("Please enter the string s2: ");
gets(s2);
printf("Please enter the position to insert: ");
scanf("%d", &n);
char *result = insert(s1, s2, n);
printf("The result string is: %s\n", result);
// 释放动态分配的内存
free(result);
return 0;
}
```
需要注意的是,由于`s1`和`s2`是字符串,其长度可能超过我们定义的数组长度,因此我们使用`gets`函数获取用户输入的字符串,并使用`malloc`函数动态分配内存来存储插入后的字符串。同时,我们还需要在函数结束时释放动态分配的内存,以避免内存泄漏的问题。
编写整理字符串的函数char * deleteChSet(char *s1, char *s2) 删除字符串s1中所有在字符串s2中出现的字符。函数返回字符串s1。用c语言编写且含有主函数
以下是函数实现和示例代码:
```c
#include <stdio.h>
#include <string.h>
char* deleteChSet(char* s1, char* s2) {
int i, j, k;
int len1 = strlen(s1);
int len2 = strlen(s2);
for (i = j = 0; i < len1; i++) {
for (k = 0; k < len2; k++) {
if (s1[i] == s2[k]) {
break;
}
}
if (k == len2) {
s1[j++] = s1[i];
}
}
s1[j] = '\0';
return s1;
}
int main() {
char s1[100] = "This is a test string.";
char s2[10] = "aeiou";
printf("Before deleting: %s\n", s1);
deleteChSet(s1, s2);
printf("After deleting: %s\n", s1);
return 0;
}
```
函数`deleteChSet`的参数`s1`是要进行删除操作的字符串,参数`s2`是包含要删除的字符的字符串。算法是遍历`s1`中的每个字符,如果该字符不在`s2`中,则将其拷贝到`s1`的前面。最后,将`s1`的长度截断为新长度`j`,并在结尾处添加空字符`\0`。
在示例代码中,我们使用了一个测试字符串`s1`和一个包含要删除字符的字符串`s2`,并在主函数中进行测试。输出结果如下:
```
Before deleting: This is a test string.
After deleting: Ths s tst strng.
```
可以看到,所有在`s2`中的字符都被删除了。