您的位置:首页 > 其它

字符串

2016-06-23 20:54 399 查看
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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: