zoukankan      html  css  js  c++  java
  • 啊哈!算法: 解密回文

    原书中读取字符串使用了gets(),使用此函数读取字符串很危险,因此改用了fgets()替代,修改后代码如下:

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int main(void)
     5 {
     6     char str[100], stack[100];
     7     int  i, len, mid, next, top;
     8 
     9     fgets(str, sizeof(str), stdin);
    10     len = strlen(str);//including '
    '
    11     mid = len / 2 - 1;//求字符串的中点
    12 
    13     top = 0;//初始化栈
    14     for (i = 0; i <= mid; i++){//将mid前的字符依次压入堆栈
    15         stack[++top] = str[i];
    16     }
    17 
    18     //判断字符串长度是奇数还是偶数,以决定需要匹配的后半部分起始下标
    19     next = (len % 2) ? (mid+2) : (mid+1);
    20 
    21     //开始匹配
    22     for (i = next; i <= len - 1; i++){
    23         if (str[i] != stack[top]) break;
    24         top--;
    25     }
    26 
    27     //验证结果
    28     if (top == 0)
    29         printf("YES
    ");
    30     else
    31         printf("No
    ");
    32 
    33     return 0;
    34 }

    gets()与fgets()之间的区别,请参看我的另一篇文章《字符串读取引申的问题》,只是要注意的是输入字符串请采用重定向哦,如果手工输入再回车会导致strlen()返回的长度比实际长度大1,原因是多读入了一个换行符。

          当然,也没必要非要把这个问题搞这么复杂,因为字符串存储在一个字符数组中,在知道字符串长度的情况下,我们完全可以通过两个指针,一个指向第一个字符,另一个指向最后一个字符,比较两者是否相等。如果相等,两个指针就同时向中间移动一个元素,进行下一轮比较;如果不等,则比较结束,表示该字符串不是回文字符串;如果直到指针移动到中间位置任然不存在不相等的情况,则表示该字符串是回文字符串。代码如下:

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int isHuiWen(char s[], int len){
     5     int i, mid = len / 2;//遍历到mid之前的元素停止
     6 
     7     for (i = 0; i < mid; i++){
     8         if (s[i] == s[len - i - 1])continue;
     9         else return 0;
    10     }
    11     return 1;
    12 }
    13 
    14 int main(void)
    15 {
    16     char str[100];
    17     int  len;
    18 
    19     fgets(str, sizeof(str), stdin);
    20     len = strlen(str);
    21     printf("%s of size %d
    ", str, len);
    22 
    23     if (isHuiWen(str, len)){
    24         printf("YES
    ");
    25     }else{
    26         printf("No
    ");
    27     }
    28 
    29     return 0;
    30 }
  • 相关阅读:
    加入创业公司有什么利弊
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Find Minimum in Rotated Sorted Array
    Remove Duplicates from Sorted Array
    Spiral Matrix
    Spiral Matrix II
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/xiaomanon/p/4466432.html
Copyright © 2011-2022 走看看