#include <stdio.h>#include <stdlib.h>void intToAscii(int num, char* str) { int i = 0, j = 0, sign = 0; char temp; if (num < 0) { sign = 1; num = -num; } do { str[i++] = num % 10 + '0'; num /= 10; } while (num > 0); if (sign == 1) { str[i++] = '-'; } str[i] = '\0'; for (j = 0; j < i / 2; j++) { temp = str[j]; str[j] = str[i - j - 1]; str[i - j - 1] = temp; }}int main() { int num = 12345; char str[20]; intToAscii(num, str); printf("%s\n", str); return 0;} 优化这个代码使其更短
时间: 2023-07-16 16:14:52 浏览: 86
以下是优化后的代码,使用了位运算和三目运算符来减少代码长度:
```c
#include<stdio.h>
void intToAscii(int num,char* str){int i=0,sign=num<0;num=sign?-num:num;do{str[i++]=num%10+'0';}while(num/=10);str[i]=sign?'-':'\0';for(int j=0;j<i/2;++j)str[j]^=str[i-j-1]^=str[j]^=str[i-j-1];}int main(){char str[20];intToAscii(12345,str);printf("%s\n",str);return 0;}
```
相关问题
给下面的代码每一行做注释#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,表示程序正常退出
}
```
使用c99标准重新优化这个代码使其更简短 #include <stdio.h> #include <stdlib.h> void itoa(int n, char s[]) { int i = 0; do { s[i++] = n % 10 + '0'; } while ((n /= 10) > 0); s[i] = '\0'; for (int j = 0, k = i - 1; j < k; j++, k--) { char c = s[j]; s[j] = s[k]; s[k] = c; } } int main() { int num = 12345; char str[10]; itoa(num, str); printf("Number: %d\nString: %s\n", num, str); return 0; }
以下是使用c99标准重新优化后的代码:
```c
#include <stdio.h>
void itoa(int n, char s[]) {
char *p = s;
do {
*p++ = n % 10 + '0';
} while (n /= 10);
*p = '\0';
for (char *q = s; q < --p; ++q) {
char c = *q; *q = *p; *p = c;
}
}
int main(void) {
int num = 12345;
char str[10];
itoa(num, str);
printf("Number: %d\nString: %s\n", num, str);
return 0;
}
```
主要优化包括:
1. 使用指针代替数组下标来遍历和修改字符串。
2. 将 `while` 循环的判断条件改为 `n /= 10`,可以避免使用额外的括号。
3. 将 `for` 循环中的 `j` 和 `k` 变量改为指针 `q` 和 `p`,可以减少变量的定义和初始化,并且更加直观。
4. 将 `for` 循环中的交换操作改为使用临时变量 `c`,可以减少指针操作的次数。
阅读全文