#字符、字符串、字符串函数

1、字符
①字符的输入:scanf( ),getchar( )
其中比较常用的是getchar( ),函数原型是getchar(void),从键盘获取一个字符,进行输入时,遇到回车符时结束输入,将存储的第一个字符存在缓冲区中。

  1 #include<stdio.h>
  2 //#include<string.h>
  3 int main(void)
  4 {
  5         char ch;
  6         ch=getchar();
  7         putchar(ch);
  8         return 0;
  9 }
输入:qwe
输出:q

②字符的输出:printf( ),putchar( )
putchar( )与getchar( )相对应,将通过getchar()保存在缓冲区的字符输出到屏幕上

--------------------------------------------------分割线-----------------------------------------------------------

2、字符串
字符串 以‘\0’结尾 ‘\0’占用内存空间,但不计入字符串长度,另外,没有字符串变量类型。
存储的形式主要有以下几种:
①字符数组保存字符串
char ch[20]=“hello”;
char ch[20]={‘h’,‘e’,‘l’,‘l’,‘o’,’\0’};
char ch[5]=“hello”; //错误
char ch[5]={‘h’,‘e’,‘l’,‘l’,‘o’}; //字符数组,不能叫字符串
② 字符指针保存字符串
char *p=“hello”; // "hello"字符串常量就表示这个字符串的首地址

#include <stdio.h>
int main(void)
{
    char *p="hello";
    *p='r'; //段错误,字符指针保存的只是字符串的首地址,字符串位于常量区域,常量区域的数据只读,不能被修改
    printf("%s\n",p);
    return 0;
}

保存多个字符串的方法:
char ch[5][20]={“hello”,“ok”};
char *p[5]={“hello”,ok};

3、字符串的输入输出

①gets( )+puts( )

#include <stdio.h>
int main(void)
{
    char ch[20];
    gets(ch);    //这个函数比较危险,如果输入的字符个数大于缓冲区大小,会出错
    puts(ch);
    return 0;
}

②scanf( )+printf( )

#include <stdio.h>
int main(void)
{
    char p[20];           //不能使用char *
    scanf("%s",p);        //p是数组名字,是数组首地址
    printf("%s\n",p);     //从首地址p开始一个字符一个字符的打印,直到遇到\0结束.
    return 0;
}

4、字符串的相关函数

①strlen( )
用于计算字符串长度,即字符个数,不包括结束字符‘\0’

#include <stdio.h>
#include <string.h>
int main(void)
{
    char ch[20]="hello";
    printf("%d\n",strlen(ch));    //strlen用于求字符串长度,操作对象只能是字符类型的数组或指针
    printf("%d\n",sizeof(ch));    //sizeof用于求类型大小,     操作对象可以是任意类型
    char *p="ok jack!";
    printf("%d\n",strlen(p));
    printf("%d\n",sizeof(p));
    return 0;
}

②strcpy( )
函数原型char *strcpy(char *dest, const char *src); 拷贝src字符串到dest中
③strncpy( )
函数原型char *strncpy(char *dest, const char *src, size_t n);拷贝src前n字节大小的字符个数到dest中


#include <stdio.h>
#include <string.h>

int main(void)
{
    char ch[20]="hello";
    char sh[20];
    //strcpy(sh,ch);             //不能把一个数组整体赋值给另一个数组。只能一个成员一个成员的赋值。对于字符数组来说有专门的函数。
    bzero(sh,20);
    strncpy(sh,ch,3);
    printf("%s\n",sh);
    return 0;
}

④ strcmp( )
函数原型int strcmp(const char *s1, const char *s2);
⑤ strncmp( )
函数原型int strncmp(const char *s1, const char *s2, size_t n);

s1 > s2     返回值 >0   1
s1== s2            =0
s1 < s2            <0   -1

比较依据:先比较两个字符串的第一个字符的ascii码。如果s1的比s2的大,就结束比较认为s1>s2
						 如果s1的比s2的小,就结束比较认为s1<s2
						 如果s1的与s2的相等,比较第二个字符,以此类推.
#include <stdio.h>
#include <string.h>
int main(void)
{
    char ch[20]="hello";
    char sh[20]="hdllz";
    //int ret=strcmp(ch,sh);
    int ret=strncmp(ch,sh,4);

    printf("%d\n",ret);
    return 0;
}

⑥ strstr( )
char *strstr(const char *haystack, const char *needle); 查找在字符串haystack中有无子串needle,如果有返回子串地址,否则返回NULL “hello” “llo”

#include <stdio.h>
#include <string.h>

int main(void)
{
    char ch[20]="hello";
    //char sh[20]="llo";
    char sh[20]="hel";

    char *p=strstr(ch,sh);
    printf("%s\n",p);
    return 0;
}

⑦strcat( )
函数原型char *str(char * s1,const char * s2);
s2指向的字符串复制到s1指向字符串的结尾,返回值是s1,一个地址。
⑧strncat( )
函数原型char *str(char * s1,const char * s2,size_t n);
s2字符串中只有前n个字符被复制到s1字符串,s2字符串中空字符及其后的任何字符都不会被复制,并在s1后面追加一个空字符,返回值是s1
注意:与strcpy( )还有strncpy( )区分,strcat( )和strncat( )所复制的字符中,第一个字符会覆盖掉s1结尾的空字符,而前者会将空字符保留

⑨strchr( )
函数原型char *strchr(const char * s,int c);
函数返回一个指向字符串s中存放字符c的第一个位置的指针,如果没有字符c,函数返回空指针。
⑩strrch( )
函数原型char *strchr(const char * s,int c);
函数返回一个指向字符串s中字符c最后一次出现的位置的指针,如果没有字符c,函数返回空指针。
⑾strpbrk( )
函数原型char *strchr(const char * s1,const char * s2);
函数返回一个指针,执行字符串s1中存放s2字符串中的任何字符的第一个位置。如果没找到任何一个字符,返回空指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值