字符串函数
一:strlen( )函数
strlen()用于统计字符串的长度
-
使用缩短字符串长度的函数
#include<stdio.h>
#include<string.h> //内含字符串函数原型
void fit(char *,unsigned int );
int main(void)
{
char mesg[]="Things should be as simple as possible,"
"but not simpler.";
puts(mesg);
fit(mesg,38);
puts(mesg);
puts("Let's loook at some more of the string.");
puts(mesg+39);
return 0;
}
void fit(char *string,unsigned int size)
{
if(strlen(string)>size){
string[size]='\0';
}
}
fit()函数把第39个元素的都好替换成'\0'字符。put()函数在空字符处停止输出,并忽略其他字符
puts(mesg+39);表示的是mesg[39]的地址,该地址上储存的是空格字符。所以puts()显示该字符并继续输出直至遇到原来字符串的空字符。
二:stract( ) 函数
stract( ) (用于拼接两个字符串)函数接受两个字符串作为参数,该函数把第二个字符串的备份附加在第一个字符串末尾,并把拼接后形成的新字符串作为第一个字符串,第二个字符串不变。
#include<stdio.h>
#include<string.h> //strcat()函数的原型在该头文件中
#define SIZE 80
char * s_gets(char * str,int n);
int main(void)
{
char flower[SIZE];
char addon[]="s smell like old shoes.";
puts("What is your favorite flower?");
if(s_gets(flower,SIZE)){
strcat(flower,addon);
puts(flower);
puts(addon);
}else {
puts("End of file encountered!");
}
puts("bye");
return 0;
}
char * s_gets(char * st,int n)
{
char *ret_val;
int i=0;
ret_val=fgets(st,n,stdin);//fgets()函数读取一整行,如果有换行符,将其替换成空字符
if(ret_val){
while(st[i]!='\n' && st[i]!='\0'){
i++;
}
if(st[i]=='\n'){
st[i]='\0';
}else
while(getchar()!='\n'){
continue;
}
}
return ret_val;
}
//strcat()接受两个字符串作为参数(用于拼接字符串)
//strcat()函数的类型是 char * (即,指向char的指针)。strcat()函数返回第一个参数,即拼接第二个字符串后的第一个字符串的地址
输出结果:
What is your favorite flower?
wonderflower
wonderflowers smell like old shoes.
s smell like old shoes.
bye
从输出中可以看出,flower改变了,而addon保持不变
-
strncat( )函数:
该函数的第三个参数指定了最大添加字符数。如:strncat( bugs,addon,13) 将把addon 字符串的内容附加给bugs ,在加到第13个字符或者遇到空字符时停止。
三:strcmp ( )函数
strcmp ( )函数(用于字符串比较),该函数通过比较运算符来比较字符串,就像比较数字一样。如果两个字符串参数相同,该函数就返回0,否则返回非0值。
#include<stdio.h>
#include<string.h> //strcmp()函数的原型在该头文件中 -->该函数用于比较字符串
#define ANSWER "Grant"
#define SIZE 40
char * s_gets(char * st,int n);
int main(void)
{
char try[SIZE];
puts("Who is buried in Grant's tomb");
s_gets(try,SIZE);
while(try!=ANSWER){
puts("No, that's wrong. try again.");
s_gets(try,SIZE);
}
puts("That's right!");
return 0;
}
char * s_gets(char * st,int n)
{
char *ret_val;
int i=0;
ret_val=fgets(st,n,stdin);
if(ret_val){
while(st[i]!='\n' && st[i]!='\0'){
i++;
}
if(st[i]=='\n'){
st[i]='\0';
}else
while(getchar()!='\n'){
continue;
}
}
return ret_val;
}
//strcmp函数是要比较字符串的内容,不是字符串
//通过比较运算符来比较字符串,如果两个字符串参数相同,该函数就返回0,否则返回非零值
-
strcmp( ) 的返回值
#include<stdio.h>
#include<string.h> //内含字符串函数原型
int main(void)
{
printf("strcmp(\"A\",\"A\") is ");
printf("%d\n",strcmp("A","A"));
printf("strcmp(\"A\",\"B\") is ");
printf("%d\n",strcmp("A","B"));
printf("strcmp(\"B\",\"A\") is ");
printf("%d\n",strcmp("B","A"));
printf("strcmp(\"C\",\"A\") is ");
printf("%d\n",strcmp("C","A"));
printf("strcmp(\"Z\",\"a\") is ");
printf("%d\n",strcmp("Z","a"));
printf("strcmp(\"apples\",\"apple\") is ");
printf("%d\n",strcmp("apples","apple"));
return 0;
}//strcmp( )的返回值,返回0或非0,根据字符的数值进行比较(通常使用ASCII值)
输出结果:
strcmp("A","A") is 0
strcmp("A","B") is -1
strcmp("B","A") is 1
strcmp("C","A") is 1
strcmp("Z","a") is -1
strcmp("apples","apple") is 1
-
说明如果在字母表中第一个字符串位于第二个字符串前面,strcmp( )就返回负数;反之返回正数;相同则返回0。
-
大写字母在小写字母前面,strcmp("Z","a") 返回的是负值。
四:strcpy( )和strncpy( )函数
如果希望拷贝整个字符串,要使用strcpy( )函数
#include<stdio.h>
#include<string.h> //strcpy()函数的原型在该头文件中
#define SIZE 40
#define LIM 5
char * s_gets(char * st,int n);
int main(void)
{
char qwords[LIM][SIZE];
char temp[SIZE];
int i=0;
printf("Enter %d words beginning with q:\n",LIM);
while(i<LIM && s_gets(temp,SIZE)){
if(temp[0] !='q'){ //意思是:temp中的第一个元素是否为q ---->同理也可以用比较字符串进行判断:if(strncmp(temp,"q",1)!=0)
printf("%s doesn't begin with q!\n",temp); //意思是:temp字符串和"q"的第一个元素是否相等
}else {
strcpy(qwords[i],temp);//只有在输入以q开头的单词后才会递增计数器 1
i++;
}
}
puts("Here are the words accepted:");
for(i=0;i<LIM;i++){
puts(qwords[i]);
}
return 0;
}
char * s_gets(char * st,int n)
{
char *ret_val;
int i=0;
ret_val=fgets(st,n,stdin);
if(ret_val){
while(st[i]!='\n' && st[i]!='\0'){
i++;
}
if(st[i]=='\n'){
st[i]='\0';
}else
while(getchar()!='\n'){
continue;
}
}
return ret_val;
}
输出结果:
Enter 5 words beginning with q:
quackery
quaster
quilt
quotient
no more
no more doesn't begin with q!
quiz
Here are the words accepted:
quackery
quaster
quilt
quotient
quiz
该程序要求要求用户输入以q开头的单词,该程序把输入拷贝至一个临时数组中,如果第一个字母是q,程序调用strcpy( )把整个字符串从临时数组拷贝至目标数组中。strcpy( ) 函数相当于字符串赋值运算符
-
strcpy( )的其他属性
第一是:strcpy( )的返回类型是char*,该函数返回的是第一个参数的值,即一个字符的地址。
第二是:第一个参数不必指向数组的开始。这个属性可用于拷贝数组的一部分。
#include<stdio.h>
#include<string.h> //strcmp()函数的原型在该头文件中
#define SIZE 40
#define WORDS "beast"
int main(void)
{
const char * orig=WORDS;
char copy[SIZE]="Be the best that you can be.";
char * ps;
puts(orig);
puts(copy);
ps=strcpy(copy+7,orig);
puts(copy);
puts(ps);
return 0;
}
输出结果:
beast
Be the best that you can be.
Be the beast
beast
空字符覆盖了copy数组中that 的第一个 t 。由于第一个参数是copy+7,所以ps指向copy中的第八个元素(下标为7)。因此puts(ps)从该处开始打印字符串
标签:函数,puts,int,char,字符串,strcmp From: https://www.cnblogs.com/ninnne/p/17206879.html