题解 | #计算某字符出现次数#
单词倒排
http://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836
1.使用c_pre标记前一次是否检测到了非字母,若前一次不是非字母,则输出,否则不输出
2.需要注意的是 对于 || 和&&连用时,尽量加上括号,避免编译器给出一些没必要的错误警报
#include<stdio.h> #include<string.h> int main(){ char s[10002]; // method 1 fgets(s,sizeof(s),stdin); int len = strlen(s)-1; char pre = '0'; for(int i=len-1;i>=0;i--){ if(!(('a'<=s[i]&&s[i]<='z')||('A'<=s[i]&&s[i]<='Z'))){ // 非字母 if(pre!=' '){ for(int j=i+1;j<len;j++) { if(('a'<=s[j]&&s[j]<='z')||('A'<=s[j]&&s[j]<='Z')) printf("%c",s[j]); else break; } printf(" "); } pre=' '; // 用空格标记 } else pre = s[i]; } for(int j=0;j<len;j++) { if('a'<=s[j]&&s[j]<='z'||'A'<=s[j]&&s[j]<='Z') printf("%c",s[j]); else break; } // method 2 输入时就进行处理 // char c; // char pre='0'; // int k=0; // while((c=getchar())!='\n'){ // if(!(('a'<=c&&c<='z')||('A'<=c&&c<='Z')) && pre!=' '){ // s[k++] = ' '; // pre = ' '; // } // else if(('a'<=c&&c<='z')||('A'<=c&&c<='Z')){ // s[k++] = c; // pre = c; // } // } // int len = strlen(s); // for(int i=len-1;i>=0;i--){ // if(s[i]==' '){ // for(int j=i+1;j<len;j++){ // if(s[j]!=' ') // printf("%c",s[j]); // else // break; // } // printf(" "); // } // } // for(int j=0;j<len;j++){ // if(s[j]!=' ') // printf("%c",s[j]); // else // break; // } }