吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 956|回复: 6
收起左侧

[学习记录] c语言 字符串常用API

[复制链接]
95886 发表于 2022-4-23 14:02
[C] 纯文本查看 复制代码
#include<stdio.h>
int main()
{
	
	int i = 11;
	int a[3] = {12,33,44};
	
	char c = 'c';
	
	//定义字符串第一种方式,和整型数组类似
	char str[5] = {'a','b','c','d','e'};//类比整型数组
	for(i = 0;i<sizeof(str)/sizeof(str[0]);i++){
		printf("%c ",str[i]);
	}
	putchar('\n');
	//定义字符串第二种方式,和整型数组类似
	char str2[5] = "abcde";
	for(i = 0;i<sizeof(str2)/sizeof(str2[0]);i++){
		printf("%c ",str2[i]);
	}
	putchar('\n');
	//定义字符串第三种方式,和整型数组类似
	char str3[] = "abfbalfbjasffjkabfjabfj";//数组元素不写,会根据真实大小来默认分配
	for(i = 0;i<sizeof(str3)/sizeof(str3[0]);i++){
		
		printf("%c ",str3[i]);
	}
	putchar('\n');
	//数组名就是地址(大多数情况下)
	char *pstr = " hekko  fdiaj  fajoja klmfk";//指针方式 ,如果操作不恰 ,内存非法,易造成段错误 segment error
	printf("%s\n",pstr);//字符串用格式占位符%s表示,不需要用i下标遍历
	putchar('\n');
	return 0;
}


[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
//字符串的存储方式  字符串在内存中,除了有效字符外abc,还会自动在后面补一个'\0',作为字符串的结束标识
//真正计算有效字符的长度  用strlen
int main()
{
	
	int a[3] = {1,2,4};//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
	
	printf("a数组的大小是:%d\n",sizeof(a));
	printf("数组的元素大小是:%d\n",sizeof(a[0]));
	printf("数组的元素大小是:%d\n",sizeof(int));
	printf("数组的个数可以这么算,结果是:%d\n",sizeof(a)/sizeof(a[0]));
	
/*	char a2[3] = {'a','b','c'};//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
	
	printf("a2数组的大小是:%d\n",sizeof(a2));
	printf("数组的元素大小是:%d\n",sizeof(a2[0]));
	printf("数组的元素大小是:%d\n",sizeof(char));
	printf("数组的个数可以这么算,结果是:%d\n",sizeof(a2)/sizeof(a2[0]));
	
	
	char a3[3] = "abc";//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
	
	printf("a2数组的大小是:%d\n",sizeof(a3));
	printf("数组的元素大小是:%d\n",sizeof(a3[0]));
	printf("数组的元素大小是:%d\n",sizeof(char));
	printf("数组的个数可以这么算,结果是:%d\n",sizeof(a3)/sizeof(a2[0]));
	//不写,数组的大小回个悲剧初始化的时候元素个数来确定
	*/
	char a4[] = "abc";//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
	
	printf("a2数组的大小是:%d\n",sizeof(a4));
	printf("数组的元素大小是:%d\n",sizeof(a4[0]));
	printf("数组的元素大小是:%d\n",sizeof(char));
	printf("数组的个数可以这么算,结果是:%d\n",sizeof(a4)/sizeof(a4[0]));//结果是4!!多了一个'\0',代表字符串结束标志
	// a4[3] = 'a';
	printf("%s\n",a4);
	int i = 0;;
	while (a4[i] != '\0'){
		printf("%c",a4[i]);
		i++;
	}
	return 0;
}


[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//计算字符串中字符的个数
//不能用sizeof来计算字符中有效字符的个数!!!应该要用strlen,它在计算字符串大小时,遇到'\0'后,就结束计数!hello\0world
/*
问题
网络通信,获取消息有乱码
协议,信息不匹配
*/
int main()
{
	
	int a[] = {1,2,3};
	printf("数组a的元素个数是: %d\n",sizeof(a)/sizeof(a[0]));
	
	char a2[128] = "hello";
	printf("数组a2的元素个数是: %d\n",sizeof(a2)/sizeof(a2[0]));
	
	printf("我们希望得到hello的真实字母个数,用strlen,%d\n",strlen(a2));
	return 0;
}


[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char *str="穿刷回福建安徽覅";
	
	//puts(str);//自动加换行
	//printf("%s\n",str);
	
	//char pstr[128] = {'\0'}; 1.申请空间  2.初始化 把每一个元素初始化为'\0'
	char *pstr = NULL;//野指针 造成非法内存访问,会出现内段错误  cmd窗口闪退
	pstr = (char*)malloc(128);//1.申请空间  2.一旦用了malloc 一定要注意内存泄漏的问题 3.malloc可能会失败,要对返回值做判断
	if(pstr == NULL){
		printf("申请内存失败\n");
		exit(-1);
	}
	memset(pstr,'\0',128);							//2.初始化 把每一个元素初始化为'\0'
	//1.初始化对象       2.初始化成什么字符     3.多大
	printf("请输入字符串:\n");
	//scanf("%s",pstr);
	gets(pstr);
	puts(pstr);
	
	
	system("pause");
	return 0;
}


[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//char *strcpy(char* dest, const char *src);
int main()
{
	char *strDest;
	strDest = (char*)malloc(128);
	memset(strDest,'\0',128);
	
	char *strSrc = "yuagfd uyagsf" ;
	
	strcpy(strDest,strSrc);
	printf("复制字符串完毕,%s\n",strDest);
	
	/*memset(strDest,'\0',sizeof(strDest)/sizeof(strDest[0]));
	strncpy(strDest,"fiashfio o");
	puts(strDest);
	
	memset(strDest,'\0',sizeof(strDest)/sizeof(strDest[0]));
	strncpy(strDest,strSrc,3);//char *strncpy(char *destinin, char *source, int maxlen);
	puts(strDest);
	*/
	char test[] = "符号IU暗黑风iuashjaspfkgiosj";
	strcat(test,strSrc);
	puts(test);
	
	char *str1 = "123";
	char *str2 = "123";
	/*
	int ret = strcmp(str1,str2);//int strcmp(const char *s1,const char *s2);
	printf("ret = %d\n",ret);
	if(ret == 0){
		printf("两个字符串一样\n");
	}*/
	if(!strcmp(str1,str2)){
		printf("两个字符串一样\n");
	}
	
	system("pause");
	return 0;
}
[C] 纯文本查看 复制代码
#include<stdio.h>#include<stdlib.h>
#include<string.h>
/*
函数原型
char *strchr(const char *str, int c)
参数
str-- 要被检索的 C 字符串。
c-- 在 str 中要搜索的字符。
功能
在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
返回值
返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。 [2] 
头文件
#include <string.h>
*/

/*
strstr()函数头文件: 

    #include <string.h>
    strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:

    char *strstr( char *str, char * substr );
函数参数:

str参数为要检索的字符串,

substr参数为要检索的子串。

函数返回值: 

返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。*/

/*
原型:extern char *strlwr(char *s);
用法:#include <string.h>
功能:将字符串s参数转换为小写形式
说明:只转换s参数中出现的大写字母,不改变其它字符。返回指向s参数的指针。

*/

/*
strupr作用相反,用法一样
*/

/*
下面是 strtok() 函数的声明。

char * strtok ( char * str , const char * delim )     
参数
str -- 要被分成一组小字符串的字符串。
delim -- 包含字符的C字符串。
返回值
该函数返回被第一个子字符串,如果没有可检索的字符串,则返回一个指针。
*/
int main()
{
	char *str = "hcvuaifh";
	char c = 'i';
	
	char *p = NULL;
	
	/*p = strchr(str,c);
	if(p == NULL){
		printf("没找到\n");
	}else{
		printf("找到\n");
		puts(p);
	}*/
	
	
	char *substr = "if";
	
	/*p = strstr(str,substr);
	if(p == NULL){
		printf("没找到\n");
	}else{
		printf("找到\n");
		puts(p);
	}*/
	
	char str1[] = "Hello World";//Windows环境下 要定义成数组的形态  否则会崩溃 Linux环境下可以
	//puts(strlwr(str1));
	//puts(strupr(str1));
	
	char str2[] = "sduihg,psodkgops,hfuios,熬鹰,放假";
	char *psubs[10];
	
	int i = 1;
	p = strtok(str2,",");
	if(p !=NULL){
	//  printf("获取到第%d个串p = %s\n",i++,p);
		psubs[i-1] = p;
	}
	while(1){
		i++;
		p = strtok(NULL,",");
		if(p !=NULL){
		//  printf("获取到第%d个串 p =%s\n",i,p);
			psubs[i-1] = p;
		}else{
			//printf("没有子串了\n");
			break;
		}
		
	}
	for(int j = 0;j<i;j++){
		puts(psubs[j]);
	}
	/*//获取第二个串的方式很奇葩,跟第一次不一样的是,目标字符串改成NULL
	p = strtok(NULL,",");
	printf("获取第二个串p = %s\n",p);
	//获取第3个串的方式很奇葩,跟第一次不一样的是,目标字符串改成NULL
	p = strtok(NULL,",");
	printf("获取第3个串p = %s\n",p);
	
	p = strtok(NULL,",");
	printf("获取第4个串p = %s\n",p);
	
	p = strtok(NULL,",");
	printf("获取第5个串p = %s\n",p);
	
	p = strtok(NULL,",");
	if(){
		printf("没有子串了\n");
	}else{
	printf("获取第6个串p = %s\n",p);}*/
	
	
	system("pause");
	return 0;
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cjcmxc + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!
头像被屏蔽
xiadongming 发表于 2022-4-23 15:04
wihn 发表于 2022-4-23 15:23
wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!

用sscanf函数,用法和scanf几乎一样。
雪流星 发表于 2022-4-23 18:10
wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!

用atoi函数
A学习的小菜鸟 发表于 2022-4-24 10:34
哦哦,算是明白了,你是自己实现字符串函数的吧,这样也是,可以更好的了解指针的用法,我当时也是这么做的,楼主加油啊
 楼主| 95886 发表于 2022-4-24 11:23
A学习的小菜鸟 发表于 2022-4-24 10:34
哦哦,算是明白了,你是自己实现字符串函数的吧,这样也是,可以更好的了解指针的用法,我当时也是这么做的 ...

一起加油,我也是刚开始学习。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 12:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表