字符串的几种定义方式,最后一种常用
#include <stdio.h>
//字符串的几种定义方式
int main()
{
//定义 1
char str1[5] = {'n','i','h','a','o'};
for(int i = 0;i<sizeof(str1)/sizeof(str1[0]);i++)
{
printf("%c ",str1[i]);
}
putchar('\n');
//定义 2
char str2[5] = "nihao";
for(int i = 0;i<sizeof(str2)/sizeof(str2[0]);i++)
{
printf("%c ",str2[i]);
}
putchar('\n');
//定义 3
char str3[] = "nihao";
for(int i = 0;i<sizeof(str3)/sizeof(str3[0]);i++)
{
printf("%c ",str3[i]);
}
putchar('\n');
//定义 4
char *str4 = "ni hao";
printf("%s",str4);
return 0;
}
字符串的存储,以及如何有效获取字符串长度
#include <stdio.h>
//字符串是如何被存储的
int main()
{
//先观察数组变量如何存储
int arr[3] = {1,2,3};
printf("arr数组的大小: %d\n",sizeof(arr));
printf("arr某个元素的大小: %d\n",sizeof(arr[0]));
printf("int的大小: %d\n",sizeof(int));
printf("arr数组中元素的个数: %d\n",sizeof(arr)/sizeof(arr[0]));
putchar('\n');
//通过以上输出,再观察字符串
char str[3] = {'h','a','i'};
printf("str数组的大小: %d\n",sizeof(str));
printf("str某个元素的大小: %d\n",sizeof(str[0]));
printf("char的大小: %d\n",sizeof(char));
printf("str数组中元素的个数: %d\n",sizeof(str)/sizeof(str[0]));
putchar('\n');
//如果不写数组大小又如何
char str1[] = "hai";
printf("str1数组的大小: %d\n",sizeof(str1));
printf("str1某个元素的大小: %d\n",sizeof(str1[0]));
printf("char的大小: %d\n",sizeof(char));
printf("str1数组中元素的个数:%d\n",sizeof(str1)/sizeof(str1[0]));
//发现:不写数组大小,输出的数组大小为4,但有效的数组大小为3;
//这是因为,系统会自动为在你的字符串结尾增加一个 ‘|0’ 字符;
//在使用%s输出整个字符串时,会找到‘|0’这个字符再停止,否则会乱码,如下:
printf("%s\n",str1);
printf("%s\n",str);//会乱码
//通过以上分析得出,用sizeof(arr)/sizeof(arr[0]) 并不能准确计算字符串的长度,那有什么办法呢?
//使用strlen来计算,如下:
printf("str1数组的大小: %d\n",strlen(str1));
return 0;
}
字符串常用api 1
#include <stdio.h>
//字符串常用api,这里看看某些常用函数的使用 1
int main()
{
/*char *str = "你好!";
puts(str);//自动换行
//char *str1;//方式1,在某些编辑器上这样可能不对,但方式三可以
//char str1[123] = {'\0'};//方式2
char *str1;//方式3
str1 = (char *)malloc(128);//malloc 申请了内存空间;
memset(str1,'\0',128); //memset 对内存空间进行了初始化;
printf("请输入:\n");
scanf("%s",str1);
puts(str1);*/
//复制函数、拼接函数、对比函数
int ret;
char *p;
char *p1 = "ni bao";
strcpy(p,p1);
printf("复制完成,p1=%s,p=%s\n",p1,p);
memset(p,'\0',sizeof(p)/sizeof(p[0]));
strcpy(p,"ni hoao");//strncpy函数跟strcpy的区别在于,前者比后者多一个形参,该形参规定了你想要复制字符串的长度如下:
//strncpy(p,"ni hao\n",2);
//strcat(p,p1);//拼接函数
puts(p);
ret = strcmp(p,p1);//比较函数,相同会返回0
printf("%d\n",ret);
return 0;
}
字符串常用api 2
#include <stdio.h>
//字符串常用api,这里看看某些常用函数的使用 2
int main()
{
/*
//搜索字符函数
char *str = "ni hao a!";
char c = 'h';//可以先定义一个字符;也可直接在strchr的第二个形参中写出你要找的字符
char *p = NULL;
p = strchr(str,c);//搜索字符函数,找你要找的字符第一次出现的位置,返回指向该位置的指针
if(p == NULL)
{
printf("没找到!\n");
}
else
{
printf("找到了!\n");
puts(p);
}
//搜索字符串函数(跟上面的函数差不多,不一样的是这个函数搜索的是字符串)
char *p1 = NULL;
p1 = strstr(str,"hao");//搜索字符函数,找你要找的字符第一次出现的位置,返回指向该位置的指针
if(p1 == NULL)
{
printf("没找到!\n");
}
else
{
printf("找到了!\n");
puts(p1);
}
*/
//转换小写字符串函数(把你输入的字符串的所有大写字符转换为小写)
char p2[] ="Hello World!";
puts(strlwr(p2));//注意:它的形参只能是字符串,不能是指针,linux应该可以
//转换大写字符串函数(跟上面相反)
puts(strupr(p2));
//字符串切割函数
char *p4;
int i,j;
i = 1;
char *p5[10];
char p3[] = "lao,shi,ni,hao,a";//这个函数的形参也只能是字符串,不能是指针,linux应该可以
p4 = strtok(p3,",");
if(p4 != NULL)
{
p5[i-1] = p4;
}
while(1)//这个函数比较奇怪,要想输出后面分割的字符串,就得在第一个形参填NULL;
{
i++;
p4 = strtok(NULL,",");
if(p4 != NULL)
{
p5[i-1] = p4;
}
else
{
printf("没有了!\n");
break;
}
}
for(j=0;j<i;j++)
{
puts(p5[j]);
}
return 0;
}
文章评论