函数题
4-6-1 删除字符
接口:
void delchar( char *str, char c );
其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。
void delchar(char* str, char c) { char* p = str; char* q = str; while (*p) { if (*p != c) { *q = *p; q++; } p++; } *q = '\0'; }
4-6-2 数组循环右移
接口:
void ArrayShift( int a[], int n, int m );
其中a[ ]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中
void ArrayShift( int a[], int n, int m ) { int x = m % n; //减少循环次数 for(int i = 0;i<x;i++) { int tmp = a[n-1]; for(int j = n-1;j>0;j--) { a[j] = a[j-1]; } a[0] = tmp; } }
4-6-3 使用函数实现字符串部分复制
接口:
void strmcpy( char *t, int m, char *s );
函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。
void strmcpy(char *t, int m, char *s) { int len = strlen(t); if (m > len) { *s = '\0'; return; } strcpy(s, t + m - 1);//有库函数就直接调用 }
编程题
4-7-1 校验ISBN-10编码
#include<stdio.h> int main() { int n = 0, flag = 1; scanf("%d",&n); char cr[11] = { '0' }; for (int i = 0; i < n; i++) { scanf("%s",cr); int sum = 0; int j = 0; for ( j = 0; j < 10; j++) { if(cr[j]!='X') sum += (j + 1) * (cr[j] - '0'); else sum+=(j+1)*10; } if (sum % 11 != 0) { flag=0; printf("%s\n",cr); } } if (flag == 1) { printf("All passed"); } return 0; }
4-7-2 删除重复字符
#include<stdio.h> #include<string.h> int Judg(char* ret,int j,char check) { int i = 0; for(i = 0;i<j;i++) { if(*(ret+i) == check) return 0; } return 1; } void Bubble_sort(char* a,int len) { int i,j,tmp; for(i = 0;i<len-1;i++) { for(j = 0;j<len-1-i;j++) { if(a[j]>a[j+1]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } } int main() { char arr[90] = {0}; char ret[90] = {0}; gets(arr); //int len = strlen(arr); int i = 0,j = 0; while(arr[i]!='\0') { if(Judg(ret,j,arr[i])) { ret[j]=arr[i]; j++; i++; } else i++; } ret[j]='\0'; Bubble_sort(ret,j); printf("%s",ret); return 0; }
4-7-3 字符串转换成十进制整数
#include<stdio.h> #include<string.h> #include<math.h> int main() { char arr[1000] = { 0 }; scanf("%s", arr); int len = strlen(arr); int i = 0; char ret[990] = { 0 }; int j = 0; for (i = 0; i < len - 1; i++) { if ((arr[i] >= 48 && arr[i] <= 57) || (arr[i] >= 65 && arr[i] <= 70) || (arr[i] >= 97 && arr[i] <= 102)) { ret[j] = arr[i]; j++; } } int f = 1; int len2 = 0; for (i = 0; i < len - 1; i++) { if (ret[0] == arr[i]) { len2 = i; break; } } for (int k = len2 - 1; k >= 0; k--) { if (arr[k] == '-') { f = -1; break; } } int re = 0; for (int m = 0; m < j; m++) { if (ret[m] >= '0' && ret[m] <= '9') { re += (ret[m] - '0') * pow(16, j - 1 - m); } else if ((ret[m] >= 'a' && ret[m] <= 'f')) { re += (ret[m] - 'a' + 10) * pow(16, j - 1 - m); } else if (ret[m] >= 'A' && ret[m] <= 'F') { re += (ret[m] - 'A' + 10) * pow(16, j - 1 - m); } } re *= f; printf("%d", re); return 0; }
4-7-4 IP地址转换
#include<stdio.h> #include<math.h> int main() { char bin[35] = {0}; scanf("%s",bin); int a=0; for(int i = 0;i<8;i++) { a += (bin[i]-'0')*pow(2,7-i); } printf("%d.",a); a = 0; for(int i = 8;i<16;i++) { a += (bin[i]-'0')*pow(2,15-i); } printf("%d.",a); a = 0; for(int i = 16;i<24;i++) { a += (bin[i]-'0')*pow(2,23-i); } printf("%d.",a); a = 0; for(int i = 24;i<32;i++) { a += (bin[i]-'0')*pow(2,31-i); } printf("%d",a); return 0; }