初始化string
#include <stdio.h>
void main(void)
{
char str1[6] = "hello"; //字符串数组会以\0结尾,需占一个字节
char str2[6] = {'h', 'e', 'l', 'l', 'o'};
char str3[] = "world";
printf("%s", str1);
}
string数据存储
注意:
1、字符串初始化是存放于不可修改区域,当用数组进行初始化是获得了该数据的备份,存储于栈,可修改;用指针初始化获得指向改数据的地址,不能修改
2、字符串是以地址方式进行赋值,直接赋值运算需使用指针
#include <stdio.h>
void one();
void two();
void three();
int main(void)
{
return 0;
}
void one()
{
char str[] = "hello"; //数据存放于栈
str[0] = "H";
char *str = "hello";//数据存放于只读区
*str = "H";
}
void two()
{
char str[] = "hello";
while(*str != '\0') {
putchar(*str++); //str 本身为地址常量,++相当于左值运算
}
char *str = "hello";
while(*str != '\0') {
putchar(*str++);
}
}
void three()
{
char str[20];
str = "nice"; //地址常量不允许赋值地址常量
char *str;
str = "nice";
}
string 追加函数 strcat
#include <stdio.h>
#include <string.h>
int main(void)
{
char hello[7] = "hello ";
char su[] = "su";
printf("%s\n", strcat(hello, su));
}
string 字符查找方法 strchr
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "hello";
char key;
char *p = NULL;
key = getchar();
p = strchr(str, key);
if(p == NULL) {
printf("no find\n");
} else {
printf("%c\n", *p);
}
return 0;
}
string 字符串比较 strcmp
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = "hello";
char str1[] = "world";
int res;
res = strcmp(str, str1);
printf("%d\n", res);
return 0;
}
string 字符串复制 strcpy
#include <stdio.h>
#include <string.h>
int main(void)
{
char dest[6];
char str[] = "hello";
printf("%s", strcpy(dest, str));
return 0;
}
string 判断字符串是否存在
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "hello c language";
char *key = "lan";
char *p = NULL;
p = strstr(str, key);
printf("%s", p);
return 0;
}
string 字符串分割 strtok
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "hello#world#c#language";
char *key = "#";
char *p = NULL;
// 将str按分隔符key截取第一个地址, strtok 内部会保存分割符后地址
p = strtok(str, key);
printf("%s\n", p);
while( (p = strtok(NULL, key)) != NULL) {
printf("%s\n", p);
}
/* p = strtok(NULL, key);
printf("%s\n", p);
p = strtok(NULL, key);
printf("%s\n", p);
p = strtok(NULL, key);
printf("%s\n", p); */
return 0;
}