1、strlen()函数:求字符串的长度,不包括“\0”
strlen()所做的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串的开头,中间某个位置等)开始扫描,直到碰到第一个字符串结束符“\0”为止,然后返回计数器值(长度不包含'\0')。
原型:unsigned int strlen(char *s);
如果只定义没有赋给初值,这个结果是不定的,它会从首地址一直找下去,直到遇到"\0"停止。例子如下:
#include
using namespace std;
int main()
{
char p[]={'a','b','c'},q[10]={'a','b','c'};
printf("%d %d\n",strlen(p),strlen(q));
//由于p数组中没有字符串结束符,长度不能确定,q数组中字符串长度为3,未赋值的默认是0
for(int i=0;i<10;++i)
{
cout<<(int)p[i]<<'\t'<<(int)q[i]<
输出:
2、strcmp()函数:字符串比较
原型:int strcmp(const char *s1, const char * s2);
如果s1 == s2,则返回0.
如果s1 < s2,则返回负数。
如果s1 > s2,则返回正数。
#include
using namespace std;
void f(char *p[],int n)
{
char *t;
int i,j;
for(i=0;i0)
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
int main()
{
char *p[5] = {"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
printf("strlen(p[1]) = %d\n",strlen(p[1]));
for(int i = 0;i<5;i++)
{
puts(p[i]);
}
system("pause");
return 0;
}
输出:
3、switch()语句
没有满足条件的情况时,执行default语句。
有满足条件的情况,但是没有加break,则后面的语句继续执行。
int main()
{
int k = 5,n = 0;
while(k>0)
{
switch(k)
{
default:break;
case 1:n+=k;
case 2:
case 3:
n+=k;
}
k--;
}
printf("%d\n",n);//输出7
/*
第一次k=5,进入while,switch,不满足执行break跳出switch语句,k--后,k=4.
第二次k=4,k>0,进入while,switch不满足,break,k--,k=3.
第三次k=3,k>0,进入while,switch满足n=n+k;n==3;k--,k=2;
第四次k=2,k>0,进入while,switch中case 2无break语句,接着执行后续语句,n=3+2=5,k--,k=1.
第五次k=1,k>0,进入while,switch中case 1满足无break语句,n=5+1=6,n=6+1=7,k--,k=0.
第六次k=0,k>0不满足,跳出while循环。
*/
system("pause");
return 0;
}
4、gets(),getchar()
gets():从标准输入设备读取字符串(多个字符)的函数,可以无限读取,不会判断上限,以回车结束读取,所以要确保buffer的空间足够大,以便不会发生溢出。
原型:char * gets(char * str);
功能:从stdio流中读取字符串,直至接收到换行符或EOF时停止,并将读取的结果存放在str指针指向的字符数组中。换行符不作为读取串中的内容,读取的换行符被转换为"\0"空字符,并由此来结束字符串。
char s[100]; gets(s);
gets(s)函数与scanf("%s",s);相似,但不完全相同,使用scanf("%s",s)函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
也就是说:gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts()函数,却在输出字符串的时候自动换行。
getchar():从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。
getchar()由宏实现:#define getchar() getc(stdin). getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar()才开始从stdio流中每次读入一个字符。如果用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar()调用读取。也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。
用法:可以利用getchar()函数让程序调试运行结束后等待程序员按下键盘后才返回编辑界面。在主函数结尾,return 0;之前加上getchar();当然也可加system("pause");可以产生同样的效果(限windows)。
getch():与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回(非缓冲输入函数),getch的返回值是用户输入字符的ASCII码,出错返回-1. 常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。