头引用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
使用字符数组存储字符串
void main(){
//最后'\0'是结束标志,或者设置比字符串多一些的空间
//char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};
//char str[6] = {'h', 'e', 'l', 'l', 'o'};
char str[10] = 'hello';
//可以修改
str[0] = 'a';
printf("%s\n", str);
printf("%#x\n", str);
getchar();
}
字符指针
void main(){
//内存连续排列
char *str = "hello c++";
//不可修改
//str += 1;
//*str = 'y'; 错误的
printf("%s\n", str);
printf("%#x\n", str);
//使用指针加法,截取字符串
str += 3;
while(*str){
printf("%c", *str);
str++;
}
printf("\n打印结束");
getchar();
}
字符串相关函数
API:字符串文档
strcat字符串拼接函数
- 原型:extern char *strcat(char *dest,char *src);
- 功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’。
- 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
// strcat.c
#include <syslib.h>
#include <string.h>
main()
{
char d[20]="Golden Global";
char *s=" View";
clrscr();
strcat(d,s);
printf("%s",d);
getchar();
return 0;
}
strcpy 字符串复制
- 原型:extern char *strcpy(char *dest,char *src);
- 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
- 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
// strcpy.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
char d[20];
clrscr();
strcpy(d,s);
printf("%s",d);
getchar();
return 0;
}
demo:
void main(void){
char dest[50];
char *a = "hello";
char *b = "world";
strcpy(dest, a);
strcat(dest, b);
printf("%s\n", dest);
system("pause");
}
strchr 查找字符串s中首次出现字符c的位置
原型:extern char *strchr(char *s,char c);
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
举例:
// strchr.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
char *p;
clrscr();
strchr(s,'V');
if(p)
printf("%s",p);
else
printf("Not Found!");
getchar();
return 0;
}
strstr 从字符串haystack中寻找needle第一次出现的位置
- 原型:extern char *strstr(char *haystack, char *needle);
- 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)
- 说明:返回指向第一次出现needle位置的指针,如果没有找到则返回NULL
举例:
#include <syslib.h>
#include <string.h>
main(){
char *s = "Hello c++";
char *l = "c+";
cahr *p;
clrscr();//清除文本模式窗口
p = strstr(s, l);
if(p){
printf("%s", p);
}else{
printf("Not Found!");
}
getchar();
return 0;
}
strcmp 比较字符串s1和s2 strcmpi 忽略大小写
- 原型:extern int strcmp(char *s1, char *s2);
- 功能:比较字符串s1和s2
- 说明:当s1 < s2 返回<0,当s1 = s2 返回 0, 当s1 > s2 返回 > 0
举例:
#include <syslib.h>
#include <string.h>
main(){
char *s1 = "hell0, c";
char *s2 = "hello, c++";
int r;
clrscr();
r = strcmp(s1, s2);
if(!r){//r == 0
printf("s1 == s2");
}else if(r > 0){
printf("s1 > s2");
}else if(r < 0){
printf("s1 < s2");
}
getchar();
return 0;
}
strset 把字符串s中的所有字符都设置成字符c
- 原型:extern char *strset(char *s , char c);
- 功能:把字符串s中的所有字符都设置成字符c
- 说明:返回指向s的指针
举例:
#include <syslib.h>
#include <string.h>
main(){
char *s = "hello, c++);
clrscr();
strset(s, 'n');
printf("%s", s);
getchar();
return 0;
}
atoi 字符串转为int类型
atol 将字符串转换为长整型值
void main(void){
char* str = "a123";
//int r = atoi(str);
printf("%d\n", r);
system("pause");
}
strtod字符串转double类型
void main(void){
char* str = "77b8b";
char** p = NULL;
//char* p = str + 2;
//参数说明:str为要转换的字符串,p为第一个不能转换的字符的指针
double r = strtod(str, p);
printf("%lf\n", r);
printf("%#x\n", p);
system("pause");
}
strupr 将字符串s转换为大写形式
- 原型:extern char *strupr(char *s);
- 功能:将字符串s转换为大写形式
- 说明:只转换s中出现的小写字母,不改变其它字符,返回指向s的指针。
举例:
#include <syslib.h>
#include <string.h>
main(){
char *s = "Hello World";
clrscr();
printf("%s", strupr(s));
getchar();
return 0;
}
strlwr 将字符串s转换为小写形式
- 原型:extern char *strlwr(char *s);
- 功能:将字符串s转换为小写形式
- 说明:只转换s中出现的大写字母,不改变其他字符。返回指向s的指针。
举例:
#include <syslib.h>
#include <string.h>
main(){
char *s = "Hello World";
clrscr();
printf("%s", strlwr(s));
getchar();
return;
}
自定义转换为小写
void mstrlwr(char str[], int len){
int i = 0;
for(; i < len; i++){
//A-Z 字母 a-z
if(str[i] >= 'A' && str[i] <= 'Z'){
str[i] = str[i] - 'A' + 'a';
}
}
}
void mian(void){
char str[] = "Hello World";
mstrlwr(str, strlen(str));
printf("%s\n", str);
system("pause");
}
删除字符串中指定的字符
void delchar(char *str, char del){
char *p = str;
while (*str != '\0') {
if (*str != del) {
*p++ = *str;
}
str++;
}
*p = '\0';
}
删除最后一个字符
void main(void){
char str[] = "hello,";
str[strlen(str) - 1] = '\0';
printf("%s\n", str);
system("pause");
}
memcpy 由src所指内存区域复制count个字节到dest所指内存区域。
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
举例:
// memcpy.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
char d[20];
clrscr();
memcpy(d,s,strlen(s));
d[strlen(s)]=0;
printf("%s",d);
getchar();
return 0;
}
memchr 从buf所指内存区域的前count个字节查找字符ch
原型:extern void *memchr(void *buf, char ch, unsigned count);
功能:从buf所指内存区域的前count个字节查找字符ch。
说明:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。
举例:
// memchr.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Hello, Programmers!";
char *p;
clrscr();
p=memchr(s,'P',strlen(s));
if(p)
printf("%s",p);
else
printf("Not Found!");
getchar();
return 0;
}
memmove 由src所指内存区域复制count个字节到dest所指内存区域
原型:extern void *memmove(void *dest, const void *src, unsigned int count);
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针。
举例:
// memmove.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
clrscr();
memmove(s,s+7,strlen(s)-7);
s[strlen(s)-7]=0;
printf("%s",s);
getchar();
return 0;
}
strpbrk 在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内
- 原型:extern char *strpbrk(char *s1, char *s2);
功能:在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内。
说明:返回指向s1中第一个相匹配的字符的指针,如果没有匹配字符则返回空指针NULL。
举例:
// strpbrk.c
#include <syslib.h>
#include <string.h>
main()
{
char *s1="Welcome To Beijing";
char *s2="BIT";
char *p;
clrscr();
p=strpbrk(s1,s2);
if(p)
printf("%s\n",p);
else
printf("Not Found!\n");
p=strpbrk(s1, "Da");
if(p)
printf("%s",p);
else
printf("Not Found!");
getchar();
return 0;
}