【C语言】字符串函数

putchar 和 getchar

putchar
int putchar(int c);
向标准输出写一个字符
返回写了几个字符,EOF(-1)表示写失败
getchar
int getchar(void);
向标准输入读入一个字符
返回类型是int是为了返回EOF(-1)
结束热键:
Windows ->Ctrl-Z
Unix->Ctrl-D

应用实例

#include <stdio.h>

int main(int argc,char const *argv[])
{
        int ch;
        while ( (ch = getchar()) != EOF ){
                putchar(ch);
        }
        printf("EOF\n");
        return 0;
}

在这里插入图片描述

string.h

strlen
size_t strlen(const char *s);
返回字符串长度,不包括结尾的‘\0’
strlen的应用及自定义

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

int mylen(const char *s){
        int count = 0;
        while ( s[count] != '\0' ){
                count++;
        }
        return count;
}

int main(int argc,char const *argv[])
{
        char str[] = "hello";
        printf("%d\n",strlen(str));
        printf("%d\n",sizeof(str));
        printf("%d\n",mylen(str));
        return 0;
}

运行结果如下
在这里插入图片描述
strcmp
int strcmp(const char *str1,const char *str2);
比较两个字符串,返回:
0:str1==str2
n:str>str2 //返回str1-str2(由左边开始取第一个不相等的字符的ASCII码计算)
-n:str1<str2

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

int mycmp(const char*s1,const char*s2){
        int index = 0;
        while ( s1[index] == s2[index] && s1[index] != '\0' ){
                index++;
        }
        return s1[index] - s2[index];
}

int mycmp1(const char*s1,const char*s2){
        while ( *s1 == *s2 && *s1 != '\0' ){
                s1++;
                s2++;
        }
        return *s1 - *s2;
}

int main(int argc,char const *argv[])
{
        char str1[] = "abc";
        char str2[] = "abc";
        char str3[] = "aBb";
        printf("%d\n",strcmp(str1,str2));
        printf("%d\n",strcmp(str1,str3));
        printf("%d\n",strcmp(str3,str1));
        printf("%d\n",mycmp(str3,str1));
        printf("%d\n",mycmp1(str3,str1));
        return 0;
}

在这里插入图片描述
strcpy
char strcpy(char *restrict dst,char *restrict src);
把src的地址拷贝到dst
restrict表明src和dst两个指针的地址不重叠;
返回dst(为了能链接起代码)

复制一个字符串
char *dst = (char*)malloc(strlen(src)+1);
strcpy(dst,src);

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

char mycpy(char *dst,const char *src){
        int index = 0;
        while ( src[index] != '\0' ){
                dst[index] = src[index];
                index++;
        }
        dst[index] ='\0';
        return *dst;
}

char mycpy1(char *dst,const char *src){
        char *ret = dst;    //后面做过运算的dst无法返回
        while ( *src ){
                *dst = *src;
                dst++;
                src++;
        }
        *dst ='\0';
        return *ret;
}

int main(int argc,char const *argv[])
{
        char str1[] = "abc";
        char str2[] = "aaaaaaaaaaaaa";
        char str3[] = "bbbbbbbbbbbbb";
        char str4[] = "ccccccccccccc";
        strcpy(str2,str1);
        printf("%s\n",str2);
        mycpy(str3,str1);
        printf("%s\n",str3);
        mycpy1(str4,str1);
        printf("%s\n",str4);
        return 0;
}

在这里插入图片描述
strcat
char strcpy(char *restrict str1,char *restrict str2);
把str2拷贝到str1后面,接成一个长的字符串
返回s1
s1必须具有足够的空间
代码应该怎么写?

在这里插入代码片

安全问题
strcpy和strcat可能出现目标地址没有足够空间的问题。
strchr

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

int main(int argc,char const *argv[])
{
        char str[] = "hello";
        printf("%s\n",str);
        char *p = strchr(str,'l');
        printf("%s\n",p);
        p++;

        char *t = (char*)malloc(strlen(p)+1);
        strcpy(t,p);
        printf("%s\n",t);
        free(t);
        return 0;
}

在这里插入图片描述
如何输出p前面的字符

		*p = '\0';
		char *t = (char*)malloc(strlen(p)+1);
		strcpy(t,str);
		printf("%s\n",t);
		free(t);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值