国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

字符數組2

2019-11-08 02:16:19
字體:
來源:轉載
供稿:網友

輸入一個字符串,求出其中最長的回文字串。 忽略所有標點符號和空格,忽略大小寫,輸出保持原樣。 輸入字符串長度不超過5000,占據單獨一行。 輸出最長的回文串,如果有多個,輸出起始位置最靠左的。

分析: 1.首先不能用scanf,因為它碰到空格或者TAB就會停止。 用fgets(buf,MAXN,stdin),它會讀取不超過MAXN-1個字符,然后在末尾添上’/0’,讀到’/n’就停止。如果一個字符都沒有讀到,返回NULL。 gets(s)也能讀,但是它沒有指明最大字符數,有可能存在緩沖區溢出,不推薦使用。 2.預處理,利用原字符串構造一個新的字符串(沒有空格和標點,且全部變成大寫)。 3.用一個數組p保存字符s[i]在buf中的位置,輸出用。 4.從左到右掃,用max記錄最長回文,枚舉回文串的中間位置i,然后不斷往外擴展,直到有字符不同。

#include<stdio.h>#include<string.h>#include<ctype.h>#define MAXN 5000 + 10char buf[MAXN], s[MAXN];int p[MAXN];int main(){ int n, m = 0, max = 0, x, y; int i, j; fgets(buf, sizeof(s), stdin); n = strlen(buf); for (i = 0; i < n; i++) if (isalpha(buf[i])) { p[m] = i; s[m++] = toupper(buf[i]); //原字符串保存到s中 m是s的長度 } for (i = 0; i < m; i++) { for (j = 0; i - j >= 0 && i + j < m; j++) //處理長度為奇數的 { if (s[i - j] != s[i + j]) break; if (j * 2 + 1 > max) { max = j * 2 + 1; x = p[i - j]; y = p[i + j]; } } for (j = 0; i - j >= 0 && i - j + 1 < m; j++) //處理長度為偶數的 { if (s[i - j] != s[i - j + 1]) break; if (j * 2 + 2 > max) { max = j * 2 + 2; x = p[i - j]; y = p[i + j + 1]; } } } for (i = x; i <= y; i++)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通河县| 和顺县| 灵璧县| 新津县| 黎城县| 太保市| 安泽县| 盖州市| 凉山| 通道| 贺兰县| 济南市| 永靖县| 织金县| 大余县| 毕节市| 邯郸市| 南昌市| 新津县| 醴陵市| 澄江县| 琼结县| 台南市| 华亭县| 扶风县| 甘谷县| 邓州市| 河北区| 泸西县| 固镇县| 星子县| 洮南市| 文昌市| 海林市| 北京市| 大兴区| 黄冈市| 平邑县| 平陆县| 荣成市| 库伦旗|