1、定义:由字符数组构成的,并且以’\0’作为结束符,用“”包围起来的若干个字符(字符使用单引号‘c’,字符串使用双引号“hello world”)
2、字符数组:数组中的每一个元素都是字符,没有’\0’
3、区别:字符数组不需要以\0结束,字符串必须以\0结束
4、初始化:数组形式字符串默认数一个指针常量,指针形式字符串默认是一个常量指针
1)使用数组形式:char str[] = {‘h’,’e’,’l’,’l’,’o’,’\0’}; 数组名str->指针常量
数组内容可以被修改:str[0] = ‘H’; //存储在栈区
2)用字符串初始化一个字符数组:char str[] = “hello”;(默认有’\0’)
数组名str->指针常量 //存储在栈区
3)使用指针创建:char *str = “hello”;(最常用)->字符串常量(),内容不能被修改
常量指针:str指向字符串首元素地址。可以改变指向:str++
//存储在常量区
3)使用malloc开辟空间后拷贝:
char str = (char )malloc(20); //存储在堆区
strcpy(str,”hello”); //可以改变字符串内容和指针指向—>普通指针
… //str中也包涵’\0’
free(str);
str = NULL;
字符串输出%s,遇到’\0’后结束,后面的字符不会输出
5、字符串的操作函数
strcpy(str1,str2) //复制拷贝字符串—字符串数组不能复制,需要每个元素一个一个的赋值
strcmp(str1,str2) //比较字符串
strlen(str) //求字符串长度(不包含’\0’
strcat(str1,str2) //追加字符串
6、字符串数组:数组中存储每个字符串的首地址
例: char* week[] = {“monday”,”tuesday”};
12、字符串“ajsdhfowr123456asdkfd”最长连续字符串;
#include <stdio.h>
#include<string.h>
char* lstr(char *str,char *longest);
int main(int argc, const char * argv[]) {
char *str = (char*)"ajsdhfowr123456asdkfd";
char longest[strlen(str)] ;
longest[0] = '\0';
// printf("%ld",strlen(longest));
lstr(str,longest);
printf("最长连续字符串为:%s\n",longest);
return 0;
}
char* lstr(char *str,char *longest)
{
char temp[40] ;
temp[0] = '\0';
int i = 0;
int j = 0;
while(j < strlen(str))
{
if(j > 0 && ((str[j+1] == str[j] + 1) || (str[j] == str[j-1] + 1)))
{
temp[i] = str[j];
i++;
}
else
{
i = 0;
}
if(strlen(longest) < strlen(temp))
{
strcpy(longest,temp);
}
j++;
}
return longest;
}