void delchar(char* str, char c) { char* p = str; int i = 0; while (*p) { if (*p != c) str[i++] = *p; p++; } str[i] = '\0'; }
用一个指针遍历,遇到不是该字符的,就把它赋给str数组,让后让指针向后移动
void f( char *p ) { int left = 0, i = 0; for(i = 0;;i++) { if(*(p+i)=='\0') break; } int right = i - 1; while(left<right) { char ch = 0; ch = *(p+left); *(p+left) = *(p+right); *(p+right) = ch; left++; right--; } }
这个就是给定一个左右指针,当左指针小于右指针时,进入循环,将左右两指针所指向空间中的元素进行交换,最后就可以得到字符串的逆序,当然Python中有现成的内置函数会更简单一点
int main() { char str[30]; gets(str); char* p = str; int i = 0; while (*p != '#') { if (*p >= 'A' && *p <= 'Z') { *p += 32; str[i++] = *p; p++; } else if (*p >= 'a' && *p <= 'z') { *p -= 32; str[i++] = *p; p++; } else { str[i++] = *p; p++; } } str[i] = '\0'; printf("%s", str); return 0; }
int main() { char str[80], c; gets(str); scanf("%c",&c); int count = 0; char* p=str; while(*p) { if(*p == c) count++; p++; } printf("%d",count); }
int is_shu(char* p) { for (int i = 0; i < 17; i++) { if (*(p + i) <= '0' && *(p + i) >= '9') { return 0; } } } int Mod(char* p) { int sum = 0; sum = ((*p)-'0') * 7 + (*(p + 1)-'0') * 9 + (*(p + 2)-'0') * 10 + (*(p + 3)-'0') * 5 + (*(p + 4)-'0') * 8 + (*(p + 5)-'0') * 4 + (*(p + 6)-'0') * 2 + (*(p + 7)-'0') * 1 + (*(p + 8)-'0') * 6 + (*(p + 9)-'0') * 3 + (*(p + 10)-'0') * 7 + (*(p + 11)-'0') * 9 + (*(p + 12)-'0') * 10 + (*(p + 13)-'0') * 5 + (*(p + 14)-'0') * 8 + (*(p + 15)-'0') * 4 + (*(p + 16)-'0') * 2; return sum % 11; } int True(char* p) { if(is_shu(p)) return 0; int ret = Mod(p); if (ret == 0) { if (*(p + 17) == '1') return 1; return 0; } if (ret == 1) { if (*(p + 17) == '0') return 1; return 0; } if (ret == 2) { if (*(p + 17) == 'X') return 1; return 0; } if (ret == 3) { if (*(p + 17) == '9') return 1; return 0; } if (ret == 4) { if (*(p + 17) == '8') return 1; return 0; } if (ret == 5) { if (*(p + 17) == '7') return 1; return 0; } if (ret == 6) { if (*(p + 17) == '6') return 1; return 0; } if (ret == 7) { if (*(p + 17) == '5') return 1; return 0; } if (ret == 8) { if (*(p + 17) == '4') return 1; return 0; } if (ret == 9) { if (*(p + 17) == '3') return 1; return 0; } if (ret == 10) { if (*(p + 17) == '2') return 1; return 0; } } int main() { int n, a = 0, count = 0; char arr[20]; scanf("%d", &n); getchar(); a = n; while (n > 0) { gets(arr); if (True(arr)) count++; else { printf("%s\n", arr); } n--; } if (count == a) printf("All passed"); }
这道题并不难,将它按题意拆解成一个一个的小问题即可,
1.判断这17位上是否都位数字
2.求这17位上的数字之和并%11
3.对照这个value判断最后一位上的数字是否正确,这一步用哈希表键值对,或者C++中的map最好,不过当时没有学