直接判断就好了
首先汉字占两位,而且用char数组存的话第一位是负的。
标点符号有
全角的也有半角的,后面那种比较简单,直接占1位,前面那种占两位。
遍历
字符串,如果当前是那个是正数,直接和半角标点比较,如果是负数,跟全角比较就好了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
bool banjiao(char c){
const char sign[]={",.!?/'\"<>\\:;"};//半角的符号,自己可以添加
for(int i=0;sign[i];i++)
if(sign[i]==c) return true;
return false;
}
bool quanjiao(char *c){ //两位
const char sign[]={",。!?、;:“”‘’"};//全角的符号,自己可以添加
for(int i=0;sign[i];i+=2) //i+=2
if(sign[i]==c[0] && sign[i+1]==c[1])return true;
return false;
}
int main(){
char str[1024];
cin>>str;
int cnt=0;
for(int i=0;str[i];i++){
if(str[i]>=0){
if(banjiao(str[i]))
cnt++;
}
else{
if(quanjiao(str+i))
cnt++;
i++;//别忘了
}
}
cout<<"biaodianshu:"<<cnt<<endl;
}