编写一个程序,利用字符数组实现两个字符串的比较。(注意不能使用字符串比较函数strcmp())
时间: 2023-05-31 15:19:01 浏览: 183
实现字符串比较
### 回答1:
可以使用循环遍历两个字符串的每一个字符,逐个进行比较。如果发现有不同的字符,则根据它们的ASCII码值大小关系,判断哪个字符串更大或更小。如果两个字符串长度不同,需要在比较完相同长度的部分后,判断剩余部分的字符是否都为,如果不是,则长度更长的字符串更大。最后返回比较结果即可。以下是示例代码:
```c
#include <stdio.h>
int str_compare(char s1[], char s2[]) {
int i = ;
while (s1[i] != '\' && s2[i] != '\') {
if (s1[i] != s2[i]) {
return s1[i] - s2[i];
}
i++;
}
if (s1[i] == '\' && s2[i] == '\') {
return ;
} else if (s1[i] == '\') {
return -s2[i];
} else {
return s1[i];
}
}
int main() {
char s1[] = "hello";
char s2[] = "world";
int result = str_compare(s1, s2);
if (result < ) {
printf("%s is less than %s\n", s1, s2);
} else if (result > ) {
printf("%s is greater than %s\n", s1, s2);
} else {
printf("%s is equal to %s\n", s1, s2);
}
return ;
}
```
### 回答2:
本题要求我们编写一个程序,使用字符数组比较两个字符串,而不能使用字符串比较函数strcmp()。字符串比较的本质是将两个字符串的每个字符按照字典序逐一比较,找到第一个不同的字符时,将其ASCII码值相减,得出比较结果;如果两个字符串完全相同,则返回0。因此,我们可以使用while循环遍历两个字符串的每个字符,并根据ASCII码值比较其大小。
具体的实现方法如下:
1. 定义两个字符数组str1和str2,分别存储要比较的两个字符串;
2. 定义一个整型变量i,并初始化为0,表示从字符串的第一个字符开始比较;
3. 利用while循环,遍历两个字符串中的每个字符,直到遇到一个不同的字符或者到达字符串结尾为止;
4. 在循环体中,使用if语句比较两个字符的ASCII码值大小,如果不同,则计算它们的差值,存储在一个整型变量result中,并使用break语句跳出循环;
5. 如果循环正常结束,说明两个字符串在前min(len1, len2)个字符处相同,此时根据字符串长度的大小关系判断它们的大小,并将结果存储在result中;
6. 最后返回result即可。
下面是具体的代码实现:
```
#include <stdio.h>
int compare(char *str1, char *str2) {
int i = 0, result = 0;
while (str1[i] != '\0' && str2[i] != '\0') {
if (str1[i] != str2[i]) {
result = str1[i] - str2[i];
break;
}
i++;
}
if (str1[i] == '\0' && str2[i] == '\0') {
return result;
} else if (str1[i] == '\0') {
return -str2[i];
} else {
return str1[i];
}
}
int main() {
char str1[] = "hello";
char str2[] = "world";
int result = compare(str1, str2);
if (result > 0) {
printf("%s > %s\n", str1, str2);
} else if (result < 0) {
printf("%s < %s\n", str1, str2);
} else {
printf("%s == %s\n", str1, str2);
}
return 0;
}
```
在这个程序中,我们定义了一个compare函数来比较两个字符串。它的参数是两个char类型的指针,分别指向要比较的两个字符串。在函数内部,我们使用一个while循环来遍历两个字符串的每个字符,并使用一个if语句比较它们的ASCII码值大小。如果遇到不同的字符,我们计算它们的差值,并存储在result变量中,然后使用break语句跳出循环。如果两个字符串在前min(len1, len2)个字符处相同,那么循环会正常结束,此时需要根据字符串长度的大小关系来判断它们的大小。
最后,在main函数中,我们调用compare函数来比较两个字符串,并根据比较结果输出相应的信息。在这个例子中,结果是"hello < world",说明字符串"hello"的字典序小于字符串"world"。
### 回答3:
这是一个比较简单的题目,我们可以通过逐个字符比较来实现。具体步骤如下:
1. 定义两个字符数组表示要比较的两个字符串。
2. 利用for循环逐个字符比较两个字符串。
3. 对于每个字符,判断它们是否相等。如果不相等,则返回它们ASCII码之差;如果相等,则继续比较下一个字符。
4. 如果两个字符串长度不同,则以短字符串长度为准,到达短字符串结尾时,比较长度差距并返回。
具体代码如下:
```c++
#include<iostream>
#include<cstring>
using namespace std;
int my_strcmp(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = min(len1, len2);
for (int i = 0; i < len; i++) {
if (str1[i] != str2[i]) return str1[i] - str2[i];
}
return len1 - len2;
}
int main() {
char str1[] = "Hello, world!";
char str2[] = "Hello, Wuhan!";
int ret = my_strcmp(str1, str2);
if (ret > 0) cout << "str1 > str2" << endl;
else if (ret < 0) cout << "str1 < str2" << endl;
else cout << "str1 = str2" << endl;
return 0;
}
```
在上述代码中,我们定义了一个函数`my_strcmp`,用于比较两个字符串。函数中我们先求出两个字符串的长度,并以短字符串长度为准进行逐个字符比较。如果遇到不相同的字符,我们就返回它们的ASCII码之差;如果比较完整个字符串后发现它们完全相同,则返回两个字符串长度之差。在主函数中,我们定义了两个字符串并用`my_strcmp`函数来比较它们的大小。
阅读全文