c语言 字符串常用API
#include<stdio.h>int main()
{
int i = 11;
int a = {12,33,44};
char c = 'c';
//定义字符串第一种方式,和整型数组类似
char str = {'a','b','c','d','e'};//类比整型数组
for(i = 0;i<sizeof(str)/sizeof(str);i++){
printf("%c ",str);
}
putchar('\n');
//定义字符串第二种方式,和整型数组类似
char str2 = "abcde";
for(i = 0;i<sizeof(str2)/sizeof(str2);i++){
printf("%c ",str2);
}
putchar('\n');
//定义字符串第三种方式,和整型数组类似
char str3[] = "abfbalfbjasffjkabfjabfj";//数组元素不写,会根据真实大小来默认分配
for(i = 0;i<sizeof(str3)/sizeof(str3);i++){
printf("%c ",str3);
}
putchar('\n');
//数组名就是地址(大多数情况下)
char *pstr = " hekkofdiajfajoja klmfk";//指针方式 ,如果操作不恰 ,内存非法,易造成段错误 segment error
printf("%s\n",pstr);//字符串用格式占位符%s表示,不需要用i下标遍历
putchar('\n');
return 0;
}
#include<stdio.h>
#include<stdlib.h>
//字符串的存储方式字符串在内存中,除了有效字符外abc,还会自动在后面补一个'\0',作为字符串的结束标识
//真正计算有效字符的长度用strlen
int main()
{
int a = {1,2,4};//连续的空间,整个数组的大小是 元素个数 X 元素类型大小
printf("a数组的大小是:%d\n",sizeof(a));
printf("数组的元素大小是:%d\n",sizeof(a));
printf("数组的元素大小是:%d\n",sizeof(int));
printf("数组的个数可以这么算,结果是:%d\n",sizeof(a)/sizeof(a));
/* char a2 = {'a','b','c'};//连续的空间,整个数组的大小是 元素个数 X 元素类型大小
printf("a2数组的大小是:%d\n",sizeof(a2));
printf("数组的元素大小是:%d\n",sizeof(a2));
printf("数组的元素大小是:%d\n",sizeof(char));
printf("数组的个数可以这么算,结果是:%d\n",sizeof(a2)/sizeof(a2));
char a3 = "abc";//连续的空间,整个数组的大小是 元素个数 X 元素类型大小
printf("a2数组的大小是:%d\n",sizeof(a3));
printf("数组的元素大小是:%d\n",sizeof(a3));
printf("数组的元素大小是:%d\n",sizeof(char));
printf("数组的个数可以这么算,结果是:%d\n",sizeof(a3)/sizeof(a2));
//不写,数组的大小回个悲剧初始化的时候元素个数来确定
*/
char a4[] = "abc";//连续的空间,整个数组的大小是 元素个数 X 元素类型大小
printf("a2数组的大小是:%d\n",sizeof(a4));
printf("数组的元素大小是:%d\n",sizeof(a4));
printf("数组的元素大小是:%d\n",sizeof(char));
printf("数组的个数可以这么算,结果是:%d\n",sizeof(a4)/sizeof(a4));//结果是4!!多了一个'\0',代表字符串结束标志
// a4 = 'a';
printf("%s\n",a4);
int i = 0;;
while (a4 != '\0'){
printf("%c",a4);
i++;
}
return 0;
}
#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));
char a2 = "hello";
printf("数组a2的元素个数是: %d\n",sizeof(a2)/sizeof(a2));
printf("我们希望得到hello的真实字母个数,用strlen,%d\n",strlen(a2));
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *str="穿刷回福建安徽覅";
//puts(str);//自动加换行
//printf("%s\n",str);
//char pstr = {'\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;
}
#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));
strncpy(strDest,"fiashfio o");
puts(strDest);
memset(strDest,'\0',sizeof(strDest)/sizeof(strDest));
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;
}#include<stdio.h>#include<stdlib.h>
#include<string.h>
/*
函数原型
char *strchr(const char *str, int c)
参数
str-- 要被检索的 C 字符串。
c-- 在 str 中要搜索的字符。
功能
在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
返回值
返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。
头文件
#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;
int i = 1;
p = strtok(str2,",");
if(p !=NULL){
//printf("获取到第%d个串p = %s\n",i++,p);
psubs = p;
}
while(1){
i++;
p = strtok(NULL,",");
if(p !=NULL){
//printf("获取到第%d个串 p =%s\n",i,p);
psubs = p;
}else{
//printf("没有子串了\n");
break;
}
}
for(int j = 0;j<i;j++){
puts(psubs);
}
/*//获取第二个串的方式很奇葩,跟第一次不一样的是,目标字符串改成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;
} C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习! wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!
用sscanf函数,用法和scanf几乎一样。 wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!
用atoi函数 哦哦,算是明白了,你是自己实现字符串函数的吧,这样也是,可以更好的了解指针的用法,我当时也是这么做的,楼主加油啊 A学习的小菜鸟 发表于 2022-4-24 10:34
哦哦,算是明白了,你是自己实现字符串函数的吧,这样也是,可以更好的了解指针的用法,我当时也是这么做的 ...
一起加油,我也是刚开始学习。
页:
[1]