這裡是乙個究極瓜皮,十個小時才做出來…
這裡是題幹@
一道很明顯的模擬題,一般都只要按照題幹的流程就ac了
#include
using
namespace std;
intmain()
if(flag==1)
if(flag==2)
}else}if
(strstr
(a,b)
!=null
&&strstr
(a,c)
!=null
) z[t2-t3]
='\0'
;while
(strstr
(z,c)
!=null
) z[t2-t3]
='\0';}
cout<}else cout<<
"-1"
;return0;
}
然後在經過了很久很久之後找出來的問題:
1、strstr的找位置的用法
**裡是用了strstr和strlen通過strstr輸出的是從第乙個找到的字元到陣列結尾的字串,然後用strlen來判斷。**但是!!**這個方式是錯的(應該)(具體的錯誤原因還在找希望大佬解答)
然後是正確用法:
strstr()-陣列引數
例子:
char a[
100]
,b[10];
int n=
strstr
(a,b)
-a;//在a當中尋找第乙個b字串並輸出位置
strstr的返回值為指標,然後a也是乙個指標並指向a[0],然後相減就可以得到在a中的位置了
千萬要記住!輸出的位置是a的位置,可能是0的那種
ps:strstr()在找不到的時候會返回null;
2、乙個非常非常低階的讀題失誤
在題幹中可以看到要求s1,s2不能交叉!
看看上面那段**,就可以發現沒有編寫關於這個要求的**
這個沒什麼好說的,直接加進去就可以了
3、關於陣列初始化的問題
很明顯在這裡沒有對陣列進行任何初始化操作,不過這題裡沒有問題
於是打算放到下一次裡湊字數
#include
#include
#include
#include
#include
using
namespace std;
intmain()
if(flag==1)
if(flag==2)
}else}if
(!strstr
(a,b)||!
strstr
(a,c)
) t=
strlen
(a);
t1=strstr
(a,b)
-a;for
(int i=
0;i) ad[t]
='\0'
; t3=
strlen
(c);
for(
int i=
0;i) c1[t3]
='\0'
; t2=
strstr
(ad,c1)
-ad;
if(t>=t1+t2+t3+
strlen
(b))cout
(b)
"-1"
}
這一段**就是上一段**把前面的問題改掉,然後再加了一點點小小的變動
#include
#include
#include
using
namespace std;
char s[
310]
,s1[20]
,s2[20]
,y[310
],ss2[20]
;int flag=
0,l,r,len1,len2,res;
voidf(
) y[k]
='\0'
; len=
strlen
(s2)
,k=0
;for
(int i=len-
1;i>=
0;i--
) ss2[k]
='\0';}
intmain()
len1=
strlen
(s1)
;len2=
strlen
(s2)
; l=
strstr
(s,s1)
-s;r=
strstr
(s,s2)
-s;if
(l+len1-
1>=r)f(
);//把s翻轉方便求s2最右邊起始點
r=strstr
(y,ss2)
-y; res=
strlen
(s)-l-len1-len2-r;
cout<}
大佬和我不同的地方:
1、cin.getline
用cin會有一些的難受的地方,比如這題當中的要用,隔開兩個輸入量
就會變得很麻煩(具體多麻煩參考上面本菜雞的**)
但是!!這是一種全新的體驗,只要三分鐘你就能愛上這種感覺 cin.getline就可以完美解決這個問題
對於cin.getline的輸入格式
cin.getline(儲存的陣列/引數,輸入的個數,乙個字元/數字/無)
ps:輸入的個數最好為最大值,不然會出現一些因缺思廳的問題
當遇到這個字元/數字的時候cin.getline結束(不讀入這個字元/數字並且在下次讀入時也不會有這個字元/數字)當然無的話就可以當作乙個cin(限制輸入個數的)來用
2、函式
當在做乙個模擬題的時候會發現自己會用到很多很多相同的**或者把一坨放在main裡面很難受
這時候運用函式就會舒服很多了(雖然在本質上沒有區別,**也不會變少)
同時這也可以更好地理解**(只要在呼叫函式的地方來乙個標註就ok了也不用上下翻看main)
ps:呼叫函式的時候會存在形參和實參的問題,解決的辦法一種是指標,另一種就是這種粗暴的直接定義全域性引數,這樣在函式和main都可以使用了(指標…本著能不用就不用)
emmmm第一次寫部落格,而且還是乙個菜雞,所以可能會存在各種學術問題或者邏輯表達問題
麻煩各位大佬多多指正,最後關注和諧,謀求發展(來自於乙個b站up主)。
26 字串最大跨距
總時間限制 1000ms 記憶體限制 65536kb 描述有三個字串s,s1,s2,其中,s長度不超過300,s1和s2的長度不超過10。想檢測s1和s2是否同時在s 現,且s1位於s2的左邊,並在s中互不交叉 即,s1的右邊界點在s2的左邊界點的左側 計算滿足上述條件的最大跨距 即,最大間隔距離 ...
字串最大跨距
描述 有三個字串s,s1,s2,其中,s長度不超過300,s1和s2的長度不超過10。想檢測s1和s2是否同時在s 現,且s1位於s2的左邊,並在s中互不交叉 即,s1的右邊界點在s2的左邊界點的左側 計算滿足上述條件的最大跨距 即,最大間隔距離 最右邊的s2的起始點與最左邊的s1的終止點之間的字元...
PTA7 7 h0093 字串最大跨距
一 題目描述 二 解題思路 首先利用string把整個字串讀入 然後用逗號進行分隔成三個字串,然後用find和rfind函式解決即可。三 實現 1 include bits stdc h 2 using namespace std 3int main 417 if vis1 vis2 18 s u ...