#include<stdio.h> #include<string.h> int strcompare(const char * str1, const char * str); int main() {char str1[30],str2[30],*p,*q; int a=0; p=str1; q=str2; fgets(str1,30,stdin); fgets(str2,30,stdin); a=strcompare(p, q); printf("%d",a); return 0; } int strcompare(const char * str1, const char * str) {int i; while(*str1==*str&&*str1!='\0'&&*str!='\0') { str1++; str++; } i=*str1-*str; return i; }求ASCLL的差值,检查有什么错误
时间: 2023-06-19 07:03:50 浏览: 171
代码中存在以下问题:
1. fgets()函数会在输入的字符串末尾添加一个换行符,需要在比较之前去除换行符。
2. 当字符串长度相等时,应该返回0,但是该代码返回的是ASCII码的差值,因此需要特判这种情况。
修改后的代码如下:
```
#include<stdio.h>
#include<string.h>
int strcompare(const char * str1, const char * str2);
int main() {
char str1[30],str2[30];
int a=0;
fgets(str1,30,stdin);
fgets(str2,30,stdin);
a=strcompare(str1, str2);
printf("%d",a);
return 0;
}
int strcompare(const char * str1, const char * str2) {
int i;
while(*str1==*str2&&*str1!='\0'&&*str2!='\0') {
str1++;
str2++;
}
if (*str1 == *str2) {
return 0;
}
i=*str1-*str2;
return i;
}
```
注意,这里使用了字符串指针而不是字符指针,因为我们需要比较的是两个字符串,而不是两个字符。
相关问题
给下面的代码每一行做注释#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STR_LEN 100 #define MAX_STR_NUM 10 // 比较函数,按照ASCII码从小到大排序 int cmp(const void* a, const void* b) { const char* s1 = *(const char**)a; const char* s2 = *(const char**)b; return strcmp(s1, s2); } // 排序函数 void sort_str_list(char** str_list, int str_num) { // 排序 qsort(str_list, str_num, sizeof(char*), cmp); } int main() { char* str_list[MAX_STR_NUM] = { "hello", "world", "apple", "banana", "orange", "cherry", "dog", "cat", "bird", "fish" }; int str_num = sizeof(str_list) / sizeof(char*); // 排序 sort_str_list(str_list, str_num); // 输出排序后的结果 for (int i = 0; i < str_num; i++) { printf("%s\n", str_list[i]); } return 0; }
好的,下面是对代码的每一行的注释:
```c
#include <stdio.h> // 包含标准输入输出头文件
#include <stdlib.h> // 包含标准库头文件
#include <string.h> // 包含字符串头文件
#define MAX_STR_LEN 100 // 宏定义字符串的最大长度为100
#define MAX_STR_NUM 10 // 宏定义字符串的最大数量为10
// 比较函数,按照ASCII码从小到大排序
int cmp(const void* a, const void* b) {
const char* s1 = *(const char**)a; // 将a强制转换为char*类型,再取a的内容(即字符串的起始地址)赋给s1
const char* s2 = *(const char**)b; // 将b强制转换为char*类型,再取b的内容(即字符串的起始地址)赋给s2
return strcmp(s1, s2); // 调用strcmp函数(字符串比较函数)比较s1和s2的大小,按照ASCII码从小到大排序
}
// 排序函数
void sort_str_list(char** str_list, int str_num) {
// 排序
qsort(str_list, str_num, sizeof(char*), cmp); // 调用qsort函数(快速排序函数),将str_list数组中的字符串按照ASCII码从小到大排序
}
int main() {
char* str_list[MAX_STR_NUM] = { // 定义一个字符串数组,数组中存放10个字符串
"hello",
"world",
"apple",
"banana",
"orange",
"cherry",
"dog",
"cat",
"bird",
"fish"
};
int str_num = sizeof(str_list) / sizeof(char*); // 计算字符串数组中的字符串数量
// 排序
sort_str_list(str_list, str_num); // 调用sort_str_list函数,排序字符串数组
// 输出排序后的结果
for (int i = 0; i < str_num; i++) { // 循环输出排序后的字符串数组
printf("%s\n", str_list[i]); // 输出字符串数组中的每个字符串
}
return 0; // 返回0,表示程序正常退出
}
```
#include<stdio.h> //任务二、赵子钧、五班、2022015643、2023/5/27 #include<string.h> int fun(const char *str) { int i,j; int count; int len; count=0; len=strlen(str); for(i=0;i<len-1;i++) { if(str[i]==str[i+1]) { j++; } for(i=0;j>0;j--) { count=j+count; } } return count; } int main(void) { const char str1[]="ssscaerfff"; printf("%d",fun(str1)); return 0; 为什么会报错 }
这段代码的问题在于变量j没有初始化,而在第9行中直接使用了变量j。应该在开始的时候将j初始化为0,例如在第6行后添加j=0;即可解决问题。另外,在第8行的for循环中,应该使用另一个变量k来进行计数,而不是直接修改循环变量i的值,否则会影响整个循环的执行。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
int fun(const char *str) {
int i,j=0,k;
int count=0;
int len=strlen(str);
for(i=0;i<len-1;i++) {
if(str[i]==str[i+1]) {
j++;
} else {
for(k=0;k<j;k++) {
count++;
}
j=0;
}
}
for(k=0;k<j;k++) {
count++;
}
return count;
}
int main(void) {
const char str1[]="ssscaerfff";
printf("%d",fun(str1));
return 0;
}
```
这个程序将会输出3,表示字符串中有3个相邻的字符相同。
阅读全文