北大OJ百练——3179:最长单词(C语言)
生活随笔
收集整理的這篇文章主要介紹了
北大OJ百练——3179:最长单词(C语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
廢話不多說,先來上題目:
OJ的這題關鍵在于如何計算我所選擇的開始位置和結束位置。我用的方法是有4個參數來存儲起來,start, buffStart, lenth, maxLenth.
start: 記錄總個字符串中最長的那個單詞的開始的位置;
buffStart: 記錄當前位置的單詞的開始位置;
lenth: 記錄當前位置的單詞長度;
maxLenth: 記錄這個字符中最長的單詞的長度。
如果我們在循環的過程中遇到是字母,(如果此時的lenth的值為0,那么buffStart的值也會被修正為i在循環中的位置)那么我的lenth就是自增,并且判斷些刻的lenth是否大于maxLenth,如果大,那么就把lenth的值給maxLenth,start的值修正為buffStart的值;如果我們在循環的過程遇到的不是字母,那么lenth就清零。
如下是我的代碼:
#include <stdio.h> #include <string.h> #define LONGESTWORDS 200 #define IS_LETTER 1 #define NOT_LETTER 0int isLetter(char ch) {if(('a' <= ch)&&(ch <= 'z') || ('A' <= ch)&&(ch <= 'Z'))return IS_LETTER;else return NOT_LETTER; }int main() {char words[LONGESTWORDS];int start, buffStart, lenth, maxLenth;int i;while(gets(words)){start = 0;buffStart = 0;lenth = 0;maxLenth = 0;for (i = 0; i < strlen(words); ++i){if(isLetter(words[i])){if(!lenth){buffStart = i;}++lenth;if(lenth >= maxLenth){maxLenth = lenth;start = buffStart;}}else{lenth = 0;}}for(i = start; i < start + maxLenth; ++i){printf("%c", words[i]);}printf("\n");}return 0; }
當然,如果你不想去繁瑣的用4個參數,也可以只用一個字符數組來解決問題,只要我們遇到的這個字母是單詞的第一個字母,那么我們從這個字符數組的第一個位置開始賦值,直到遇到不是字母的為止,并在每次都在最后賦上一個'\0'的結束符。這種方法可能更加簡單一些,具體的實現我在這里就不多寫了,感興趣的朋友們可以嘗試一下。
總結
以上是生活随笔為你收集整理的北大OJ百练——3179:最长单词(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北大OJ百练——4075:矩阵旋转(C语
- 下一篇: 北大OJ百练——2721:忽略大小写比较