完善以下程序#include<stdio.h> int strcmp(char *p1,char *p2){ /*********Begin*********/ while(*p1 && *p2 && (*p1 == *p2)) { p1++; p2++; } return (*p2 - *p1); /*********End**********/ } int main() { char a[110],b[110]; scanf("%s%s",a,b); if(strcmp(a,b)>0) printf("%s", a); else printf("%s", b); return 0; }
时间: 2023-07-01 14:27:52 浏览: 53
这个程序看起来是比较简单的字符串比较程序,其中使用了自定义的 `strcmp` 函数来比较两个字符串的大小,并输出较大的那个字符串。
然而,这里的 `strcmp` 函数实现并不完美,存在以下问题:
1. 函数名与系统库函数名重复,在使用时可能会引起混淆;
2. 函数返回值的含义与标准库函数 `strcmp` 不同,应该返回两个字符串的比较结果,而不是一个字符的差值;
3. 函数实现中只考虑了两个字符串的长度相同的情况,如果两个字符串长度不同,将会出现错误结果。
因此,我们可以对程序进行如下完善:
1. 修改函数名为 `my_strcmp` 等不与系统库函数名冲突的函数名。
2. 修改函数返回值为两个字符串的比较结果,即当 `p1` 大于 `p2` 时返回一个正数,当 `p1` 等于 `p2` 时返回 0,当 `p1` 小于 `p2` 时返回一个负数。
3. 修改函数实现,考虑两个字符串长度不同的情况,如果到某个字符串的结尾,直接比较两个字符串长度的差值即可。
修改后的程序如下:
相关问题
练习-输入一批字符串,将字符串按从小到大的顺序排序并且输出#include <stdio.h> #include<string.h> #define M 100 #define N 80 void inputarr (char array[ ][N] , int n); void sortstr (char array[ ] [N] , int n); void outputarr (char array[ ] [N] , int n); void swap(char *p1,char *p2);
好的,这是一个字符串排序的问题,我会帮助你解决它。下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define M 100
#define N 80
void inputarr (char array[][N], int n);
void sortstr (char array[][N], int n);
void outputarr (char array[][N], int n);
void swap(char *p1, char *p2);
int main()
{
char array[M][N];
int n;
printf("请输入字符串的个数:");
scanf("%d", &n);
inputarr(array, n); // 输入字符串
sortstr(array, n); // 排序
outputarr(array, n); // 输出排序后的字符串
return 0;
}
// 输入字符串
void inputarr(char array[][N], int n)
{
printf("请输入%d个字符串:\n", n);
for (int i = 0; i < n; i++)
{
scanf("%s", array[i]);
}
}
// 排序
void sortstr (char array[][N], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (strcmp(array[j], array[j + 1]) > 0)
{
swap(array[j], array[j + 1]);
}
}
}
}
// 输出字符串
void outputarr (char array[][N], int n)
{
printf("排序后的字符串为:\n");
for (int i = 0; i < n; i++)
{
printf("%s\n", array[i]);
}
}
// 交换两个指针指向的字符串
void swap(char *p1, char *p2)
{
char temp[N];
strcpy(temp, p1);
strcpy(p1, p2);
strcpy(p2, temp);
}
```
你可以将此代码复制到你的本地编译器上运行,输入字符串并按从小到大的顺序排序,然后输出排序后的结果。
asdfghghjk xcfghyujkk aawertgbof asdfghghjk acfghyujkk xawertgbof根据上述运行结果修改下列程序#include <stdio.h> void sort(char *p1, char *p2, char *p3); int main() { char a[100],b[100],c[100],*p1,*p2,*p3; scanf("%s%s%s", &a, &b, &c); p1=a;p2=b;p3=c; sort(p1, p2, p3); printf("%s %s %s\n", a, b, c); return 0; } void sort(char *p1, char *p2, char *p3) { char t; if(strcmp(p1,p2)>0) { t = *p1; *p1 = *p2; *p2= t; } if(strcmp(p2,p3)>0) { t = *p2; *p2 = *p3; *p3 = t; } if(strcmp(p1,p3)>0) { t = *p3; *p1 = *p3; *p3 = t; } }
这段程序存在一些问题,需要修改。首先,scanf函数中不需要使用&符号,因为数组名本身就是指向数组首元素的指针,可以直接传递给函数。其次,在sort函数中交换字符时,应该使用指针操作,而不是单纯的字符变量交换。最后,sort函数中的if语句顺序有误,应该先比较p1和p3,再比较p1和p2,最后比较p2和p3。修正后的程序如下:
```c
#include <stdio.h>
#include <string.h>
void sort(char *p1, char *p2, char *p3);
int main() {
char a[100], b[100], c[100], *p1, *p2, *p3;
scanf("%s%s%s", a, b, c);
p1 = a;
p2 = b;
p3 = c;
sort(p1, p2, p3);
printf("%s %s %s\n", a, b, c);
return 0;
}
void sort(char *p1, char *p2, char *p3) {
char t;
if (strcmp(p1, p3) > 0) {
t = *p1;
*p1 = *p3;
*p3 = t;
}
if (strcmp(p1, p2) > 0) {
t = *p1;
*p1 = *p2;
*p2 = t;
}
if (strcmp(p2, p3) > 0) {
t = *p2;
*p2 = *p3;
*p3 = t;
}
}
```