#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv){
char a[500];
int b;
while(cin.getline(a,500)){
b=0;
for(int c=1;c<strlen(a);c++){
if(isalpha(a[c])>=1&&isalpha(a[c-1])==0)
b++;
}
cout<<b+1<<endl;
}
}
我的code為甚麼最後必須要加1才AC?
試試“ Hello everybody!!”這組測資,你就知道了。
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv){
char a[500];
int b;
while(cin.getline(a,500)){
b=0;
for(int c=1;c<strlen(a);c++){
if(isalpha(a[c])>=1&&isalpha(a[c-1])==0)
b++;
}
cout<<b+1<<endl;
}
}我的code為甚麼最後必須要加1才AC?
仔細看這裡:
if(isalpha(a[c])>=1&&isalpha(a[c-1])==0) b++;
b加一的條件是"如果偵測到一個字符是英文字母,而且前一個字符不是英文字母"
兩筆測資的最後都是標點符號,不會導致b+1
建議把掃描的方向反過來,改成:
for(int c=0;c<strlen(a)-1;c++){
if(isalpha(a[c])>=1&&isalpha(a[c+1])==0)
b++;
}