c++字符串函数--2

字符串就是字符的序列,可看作单个数据项。定义在双引号之间的字符组(双引号除外)就是一个字符串常量。例:"Man is abviously made to think"。
字符串变量的声明与初始化:C语言并不支持字符串数据类型。但是,它允许作为字符数组来表示字符串。因此在C语言中,字符串变量就是任何合法的C变量名,且总是被声明为一个字符数组。其声明的一般形式为char  string_name[size];    size确定了string_name的字符数。如:char city[10];char name[30];当编译器把字符串赋给字符数组时,自动的在字符串的末尾加上空字符('\0')。因此,size必须大于等于字符串中的最大字符数再加上1。

C语言允许以下两种方式初始化:char city[9]="New York"; char city[9]={'N','e','w',' ','Y','o','r','k'};
C语言可以不用指定元素的数目来初始化字符数目,这时数组的大小将根据初始化元素的数量自动确定。


可以把数组的大小定义的字符串更大。如char city[100]="good";是合法的。而下面的这个就不合法char city[2]="what";这将导致编译器的一个错误。不能把初始化从声明中分隔出来,如:
char str3[5];
str3[5]="what";
是不允许的。
下面这个语句也是不允许的:
char a[4]="abc";
char b[4];
b=a;
数组名不能用作赋值运算符的左操作数。


使用scanf函数从终端读取字符串:

一般格式为   char address[size];
scanf("%s",address);
这种读取方法的问题是,一量遇到空白符(包括空格、制表格、回车符、样式缩进和换行符),就停止输入。所以如果在终端输入如下的文本行:NEW YORK则只有字符串NEW读入数组address中。

如果要读取整行的字符"NEW YORK",就要使用两个大小适合的字符数组。
main()
{
	char word1[5],word2[5];
	printf("Enter text:\n");
	scanf("%s%s",word1,word2);
	printf("%s %s\n",word1,word2);
}
写一个程序,使用scanf函数从终端读取一系列数。
main()
{
	char word1=[40],word2[40],word3[40],word4[40];
	printf("Enter text:\n");
	scanf("%s%s",word1,word2);
	scanf("%s",word3);
	scanf("%s",word4);
	printf("\n");
	printf("%s\n %s\n",word1,word2);
	printf("%s\n",word3);
	printf("%s\n",word4);
}
输入:Oxford Road, London M17ED
输出:Oxford
Road,
London
M17ED
也可以scanf语句中使用%ws格式说明符指定字段的宽度,用于从输入字符串中读取指定数量的字符。
在上面的例子第五行中,把"%s%s"改为"%2s%s",则输出:
ox
ford
Road,
London


字符串处理函数(puts,gets,strcat,strcpy and strncpy,strcmp,strlen,strlwr,strupr)
1:puts函数
一般形式 puts(字符数组)
作用是将一个字符串(以'\0'结束的字符序列),输出到终端。
main()
{
	char str[]={"I\nLove\nChina\n"};
	puts(str);
}
输出:I
Love
China
2:gets函数
一般形式 gets(字符数组)
		  作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
		  main()
{
	char str[100];
	puts(str);
} 
输入:Sorry seems to be the hardest word.What I got to do to make you love me?
输出:Sorry seems to be the hardest word.What I got to do to make you love me?
注意用puts和gets函数只能输出或输入一个字符串,不能写成
puts(str1,str2)或gets(str1,str2)

3:strcat函数
一般形式 strcat(字符数组1,字符数组2)
其作用是边接两个字符数组中的字符串,把字符串2边接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
main()
{
	char str1[]={"What I got to do to make you love me. "};
	char str2[]={"Sorry seems to be the hardest word"};
	printf("%s",strcat(str1,str2));
	getch();
}
输出:What I got to do to make you love me.Sorry seems to be the hardest word
连接前两个字符串的后面都有'\0',连接时将字符串后面的'\0'取消,只在新串啊后保留'\0'.
main()
{
	char str1[40];
	char str2[40];
	gets(str1);
	gets(str2);
	printf("%s\n",strcat(str1,str2));
	getch();
}

该函数是从终端输入两个字符串,并显示出来。


4 strcmp函数
其一般形式为strcmp(字符串1,字符串2)
它的作用是比较字符串1和字符串2。可有以下几种形式:
strcmp(str1,str2);
strcmp("China","Korea");
strcmp("str1,"Beijing");
	   字符串比较的规则与其它语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到遇到不同的字符或遇到'\0'为止。如:
	   "a">"A","computer">"compare","DOG"<"cat"...
	   比较的结果由函数值带回。
	   如果字符串1=字符串2,则函数值为0;
	   如果字符串1>字符串2,则函数值为一个正值;
	   如果字符串1<字符串2,则函数值为一个负值;
#include
	   main()
{
	char prompt[30]="What's your password?:";
	char password[10];
	printf("%s\n",prompt);
	gets(password);
	if(strcmp(password,"000")==0)
	{
		printf("Password is=%s\n",password);
		printf("OK");
	}
	else
	{
		printf("Password is=%s\n",password);
		printf("Invailvd password!");
	}
}


5 strlen函数
一般形式为strlen(字符数组)
它的作用是测试字符串长度的函数。函数的值为字符串中的实际长度,不包括'\0'。例:
char str[10]={"China"};
printf("%d",strlen(str));
输出的结果不是10,也不是6,而是5。


6 strlwr函数和strupr函数
其一般形式为strlwr(字符串);
作用是将字符串中的大写字母转换成小写字母。
strupr函数与strlwr函数正好相反,它是把字符串中的小写字母转换成大写字母。

你可能感兴趣的:(【C++】)