首页 > 其他分享 >字符串函数

字符串函数

时间:2023-03-11 20:46:36浏览次数:36  
标签:函数 puts int char 字符串 strcmp

字符串函数

一:strlen( )函数

strlen()用于统计字符串的长度

  1. 使用缩短字符串长度的函数

#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()显示该字符并继续输出直至遇到原来字符串的空字符。

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保持不变

  1. 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,否则返回非零值 
​

 

  1. 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
  1. 说明如果在字母表中第一个字符串位于第二个字符串前面,strcmp( )就返回负数;反之返回正数;相同则返回0。

  2. 大写字母在小写字母前面,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( ) 函数相当于字符串赋值运算符

  1. 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

使用指针strcpy( )函数

空字符覆盖了copy数组中that 的第一个 t 。由于第一个参数是copy+7,所以ps指向copy中的第八个元素(下标为7)。因此puts(ps)从该处开始打印字符串

标签:函数,puts,int,char,字符串,strcmp
From: https://www.cnblogs.com/ninnne/p/17206879.html

相关文章

  • 内存操作函数详解
    这是一篇介绍内存操作函数的博客,包含memcpy、memmove、memcmp、memset的具体介绍及模拟实现,也与相似的字符串操作函数进行了比较。一、MSDN中的注解1、memcpy在缓冲区......
  • 对象、数组、字符串的一些方法(笔记)
    对象字符串方法数组方法 ......
  • 【Python】main函数 if name=='main' 详解
    引言Python代码print('hellowword')代码执行顺序我们可以看到Python仅仅用了一行代码即可完成其他编程语言多行的输出Hello,World其他的编程语言像C/C++/C#/JA......
  • SQL中截取字符串方法
    1left(str,length)#从左边开始截取str,length是截取的长度23right(str,length)#从右边开始截取str,length是截取的长度45substring(str,substr,m)#返回字符subs......
  • shell子字符串截取
    http://c.biancheng.net/view/1120.htmlShell截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取。从指定位置开始截取这种方式需要两个参数:除......
  • 字符串压缩(三)之短字符串压缩
    摘自:https://blog.csdn.net/jh035512/article/details/128090607一、通用算法的短字符压缩开门见山,我们使用一段比较短的文本:Narrator:Itisrainingtoday.So,Pe......
  • test20230304考试总结(2023春 · 字符串)
    前言赛时得分明细:ABCDTotalRank1001000702702C题如此说道:字符串没有学好的报应!!A.P4391[BOI2009]RadioTransmission无线传输题面给定一个字......
  • day11 打卡20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求
    day11打卡20.有效的括号1047.删除字符串中的所有相邻重复项150.逆波兰表达式求值20.有效的括号20题目链接1.本来使用的是Stack,时间2ms,内存39.6MB。而Deque时间......
  • SQL函数——时间函数
    1、使用NOW()、CURDATE()、CURTIME()获取当前时间在这里我有一个问题想问问大家,你们平时都是怎么样子获取时间的呢?是不是通过手表、手机、电脑等设备了解到的,那么你们......
  • js判断是否是字符串 instanceof
    exportfunctionisString(str){if(typeofstr==="string"||strinstanceofString){returntrue}returnfalse}conststr=newString('hello'......