指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组(字符串)char str[];更灵活的是,在函数的传递中,指针、数组名在一定程度上可以互换。请编制函数,对字符串的进行各种操作。
去除字符串str中的特定字符c(如空格),结果仍保存到原字符串中
/* * Copyright (c) 2014,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:demo.cpp * 完成时间:2014年12月15日 * 版本号:v1.0 */ #include <iostream> using namespace std; char *pdelchar(char *str, const char c); int main(){ char s1[50]="Hello world. "; char s2[50]="Good morning. "; char s3[50]="vegetable bird! "; pdelchar(s1,' '); cout<<"去除空格后:"<<s1<<endl; return 0; } char *pdelchar(char *str, const char c) { char *p=str,*q=str; for(;*q!=' ';q++) { if(*q!=c) { *p=*q; p++; } } *p=' '; return str; }运行结果:
求字符串str的长度并返回
/* * Copyright (c) 2014,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:demo.cpp * 完成时间:2014年12月15日 * 版本号:v1.0 */ #include <iostream> using namespace std; int pstrlen(char *str); int main() { int n; char s1[50]="Hello world. "; n=pstrlen(s1); cout<<"""<<s1<<"""<<"的长度为"<<n<<endl; return 0; } int pstrlen(char *str) { char *p=str; int i=0; for(;*p!=' ';p++) i++; return i; }
运行结果:
统计句子str中单词的个数
/* * Copyright (c) 2014,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:demo.cpp * 完成时间:2014年12月15日 * 版本号:v1.0 */ #include <iostream> using namespace std; int pwordnum(char *str); int main() { int n; char s[50]="Make English easy to learn."; n=pwordnum(s); cout<<"""<<s<<"""<<"的单词数为:"<<n<<endl; return 0; } int pwordnum(char *str) { char *p=str; int i=0; for(;*p!=' ';p++) { if(*p==' ') i++; } i++; return i; }
运行结果:
去除句子中所有多余的空格,返回去除了空格的字符串
/* * Copyright (c) 2014,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:demo.cpp * 完成时间:2014年12月15日 * 版本号:v1.0 */ #include <iostream> using namespace std; char *prim(char *str); int main() { char s[50]="Make English easy to learn."; *prim(s); cout<<"去除空格后为:"<<s<<endl; return 0; } char *prim(char *str) { char *p=str,*q=str; for(;*p!=' ';p++) { if(*p!=' ') { *q=*p; *q++; } } *q=' '; return str; }
运行结果:
*比较两个字符串,返回值同strcmp()( 参考贺老)
#include <iostream> #include <iomanip> using namespace std; int pstrcmp(char *str1, char *str2); int main(void) { char *s[81]= {"Tudou","Shanyaodan","Yangyu","Malingshu"}; int i=0,j=0; cout<<"土豆大PK:"<<endl; cout<<setw(12)<<" "; for(; i<4; i++) { cout<<setw(12)<<s[i]; } cout<<endl; for(i=0; i<4; i++) { cout<<setw(12)<<s[i]; for(j=0; j<4; j++) { cout<<setw(12)<<pstrcmp(s[i],s[j]); } cout<<endl; } return 0; } //str>str2,返回1 //str==str2,返回0 //str<str2,返回-1 int pstrcmp(char *str1, char *str2) { char *p=str1,*q=str2; while(*p==*q&&*p!=' '&&*q!=' ') { p++; q++; } if (*p>*q) return 1; else if(*p<*q) return -1; else return 0; }
运行结果:
关于strcmp()
C/C++函数,比较两个字符串。设这两个字符串为str1,str2,若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。
原型:extern int strcmp(const char *s1,const char * s2);
当s1<s2时,返回为负数
当s1=s2时,返回值= 0
当s1>s2时,返回正数
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇' '为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
举例代码:
int__cdeclstrcmp(constchar*src,constchar*dst){ intret=0; while(!(ret=*(unsignedchar*)src-*(unsignedchar*)dst)&&*dst) ++src,++dst; if(ret<0) ret=-1; elseif(ret>0) ret=1; return(ret); }
@ Mayuko