目录
char str[5] = {'h', 'e', 'l', 'l', 'o'};
char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[6] = "hello";
printf("%s"); 使用printf打印字符串的时候,必须碰到 \0 结束。
- for (size_t i = 0; i < 10; i++)
- {
- scanf("%c", &str[i]);
- }
-
- int count[26] = {0}; // 代表26个英文字母出现的次数。
-
- for (size_t i = 0; i < 11; i++)
- {
- int index = str[i] - 'a'; // 用户输入的字符在 count数组中的下标值。
- count[index]++;
- }
-
- for (size_t i = 0; i < 26; i++)
- {
- if (count[i] != 0)
- {
- printf("%c字符在字符串中出现 %d 次\n", i+'a', count[i]);
- }
- }
1)用于存储字符串的空间必须足够大,防止溢出。 char str[5];
2) 获取字符串,%s, 遇到空格 和 \n 终止。
借助“正则表达式”, 获取带有空格的字符串:scanf("%[^\n]", str);
从键盘获取一个字符串, 返回字符串的首地址。 可以获取带有 空格的字符串。 【不安全】
char *gets(char *s);
参数:用来存储字符串的空间地址。
返回值:返回实际获取到的字符串首地址。
代码
如果输入 ni hao 输出的就是 获取的字符串为ni hao
- char str[10];
-
- printf("获取的字符串为:%s", gets(str));
-
- system("pause");
- return EXIT_SUCCESS;
从stdin获取一个字符串, 预留 \0 的存储空间。空间足够读 \n, 空间不足舍弃 \n 【安全】
char *fgets(char *s, int size, FILE *stream);
参1:用来存储字符串的空间地址。
参2:描述空间的大小。
参3:读取字符串的位置。 键盘 --》 标准输入:std
返回值:返回实际获取到的字符串首地址。
代码
如果输入hello world 输出hello wor
- int main(void)
- {
- char str[10];
-
- printf("获取的字符串为:%s", fgets(str, sizeof(str), stdin));
-
- system("pause");
- return EXIT_SUCCESS;
- }
将一个字符串写出到屏幕. printf("%s", "hello"); / printf("hello\n"); / puts("hello"); 输出字符串后会自动添加 \n 换行符。
int puts(const char *s);
参1:待写出到屏幕的字符串。
返回值: 成功:非负数 0。 失败: -1.
代码
- int main(void)
- {
- char str[] = "hello world\n";
-
- int ret = puts(str); // puts("hello world");
-
- printf("ret = %d\n", ret); //ret = 0
-
- system("pause");
- return EXIT_SUCCESS;
- }
将一个字符串写出到stdout.输出字符串后, 不添加 \n 换行符。
int fputs(const char * str, FILE * stream);
参1:待写出到屏幕的字符串。 屏幕 --》标准输出: stdout
参数:写出位置 stdout
返回值: 成功:0。 失败: -1.
代码
- int main(void)
- {
- char str[] = "hello world\n";
-
- //int ret = fputs(str, stdout); //
-
- int ret = fputs("hello world\n", stdout);
-
- printf("ret = %d\n", ret);
-
- system("pause");
- return EXIT_SUCCESS;
- }
碰到 \0 结束,不包含'\0'
size_t strlen(const char *s);
参1: 待求长度的字符串
返回:有效的字符个数。
代码
- int main(void)
- {
- char str[] = "hello world";
-
- printf("sizeof(str) = %u\n", sizeof(str)); //输出12
- printf("strlen(str) = %u\n", strlen(str)); //输出11
-
- system("pause");
- return EXIT_SUCCESS;
- }
-
- #include
- #include
- #include
- #include
- int no_space_str(char *str)
- {
- int count = 0;
-
- //har str[] = "ni chou sha ";
-
- char* p = str;
-
- while (*p)
- {
- if (*p != ' ')
- {
- count++;
- }
- p++;
- }
- return count++;
- }
- int main()
- {
- char str[] = "ni chou sha ";
- int ret = no_space_str(str);
- printf("%d", ret);
- }
- #include
- #include
- #include
- #include
- //字符串逆置
- void str_inserse(char* str)
- {
- char* start = str; //记录元素首地址
- char* end = str + strlen(str) - 1; // 记录最后一个元素地址
-
- while (start < end) //首元素地址是否小于最后一个元素地址
- {
- char temp = *start;
- *start = *end;
- *end = temp;
- start++; //首元素对应指针后移
- end--; //尾元素对应指针前移
- }
- }
- //判断回文字符串 abcddcba
- int str_abcba(char *str)
- {
- char *start = str;
- char *end = str + strlen(str) - 1;
-
- while (start < end)
- {
- if (*start != *end) //判断字符是否一致
- {
- return 0; // 0表示非回文
- }
- start++;
- end--;
- }
- return 1;
- }
-
- int main()
- {
- char str[] = "this is a test";
-
- //str_inserse(str);
-
- //printf("str = %s----------------------\n", str);
-
- char s2[] = "abccba";
-
- int ret = str_abcba(s2);
- if (ret == 0) printf("不是回文\n");
- else if (ret == 1) printf("是回文\n");
-
- }
头文件 #include
将 src 的内容,拷贝给 dest。 返回 dest。 保证dest空间足够大。【不安全】
char *strcpy(char *dest, const char *src);
函数调用结束 返回值和 dest参数结果一致。
如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况
参数
dest:目的的字符串首地址
src:原字符首要地址
n:指定需要拷贝字符串个数
将 src 的内容,拷贝给 dest。只拷贝 n 个字节。 通常 n 与dest对应的空间一致。
默认 不添加 ‘\0’
char *strncpy(char *dest, const char *src, size_t n);
特性: n > src: 只拷贝 src 的大小
n < src: 只拷贝 n 字节大小。 不添加 ‘\0’
成功返回字符串dest首地址
- #include
- #include
- #include
- #include
- #include
-
- // strcpy
- int main0301(void)
- {
- char src[] = "abc efg zhansan wangwu ";
- char dest[10] = {0};
-
- char *p = strcpy(dest, src); ;// 字符串src 拷贝给dest
-
- printf("p= %s\n", p);
- printf("dest = %s\n", dest);
-
- system("pause");
- return EXIT_SUCCESS;
- }
- // strncpy
- int main(void)
- {
- char src[] = "hello world";
- char dest[100] = { 0 };
-
- char *p = strncpy(dest, src, 100); ;// 字符串src 拷贝给dest
- for (size_t i = 0; i < 10; i++)
- {
- printf("%c\n", p[i]);
- }
-
- printf("p= %s\n", p);
- printf("dest = %s\n", dest);
-
- system("pause");
- return EXIT_SUCCESS;
- }
将 src 的内容,拼接到 dest 后。 返回拼接后的字符串。 保证 dest 空间足够大。
char *strcat(char *dest, const char *src);
将 src 的前 n 个字符,拼接到 dest 后。 形成一个新的字符串。保证 dest 空间足够大。
char *strncat(char *dest, const char *src, size_t n);
函数调用结束 返回值和 dest 参数结果一致。
代码
- #include
- #include
- #include
- #include
- #include
-
- int main0401(void)
- {
- char src[] = "world";
- char dest[] = "hello";
-
- char *p = strcat(dest, src);
-
- printf("p = %s\n", p);
- printf("dest = %s\n", dest); // helloworld
-
- system("pause");
- return EXIT_SUCCESS;
- }
-
- int main0402(void)
- {
- char src[] = "world";
- char dest[6] = "hello";
-
- char *p = strncat(dest, src, 3);
-
- printf("p = %s\n", p);
- printf("dest = %s\n", dest);
-
- printf("%d\n", strlen(dest));
-
- system("pause");
- return EXIT_SUCCESS;
- }
不能使用 > < >= <= == !=
int strcmp(const char *s1, const char *s2)
比较s1和s2两个字符串,如果相等 返回0.如果不相等,进一步表 s1 和 s2 对应位 ASCII码 值。
s1 > s2 返回1
s1 < s2 返回-1
int strncmp(const char *s1, const char *s2, size_t n);
比较s1和s2两个字符串的前n个字符,
如果相等 返回0。如果不相等,进一步表 s1 和 s2 对应位 ASCII码值。(不比字符串 ASCII码的和)
s1 > s2 返回1
s1 < s2 返回-1
代码
- #include
- #include
- #include
- #include
- #include
-
- int main0501(void)
- {
- char *str1 = "helloworld";
- char *str2 = "helloz";
-
- printf("ret = %d\n", strcmp(str1, str2));
-
- system("pause");
- return EXIT_SUCCESS;
- }
-
- int main0502(void)
- {
- char *str1 = "helloworld";
- char *str2 = "helloz";
-
- printf("ret = %d\n", strncmp(str1, str2, 8));
-
- system("pause");
- return EXIT_SUCCESS;
- }
-
如果相输入带空格字符串scanf("%[^\n]", str);
int sprintf(char *str, const char *format, ...);
功能:根据参数format字符串来转化并格式化数据,然后将结果输出到str指定的空间,直到字符串出现结束符 '/0' 为止
参数:
str 字符串首地址
format:字符串格式,用法和printf()一样
sscanf()
int sscanf(const char *str, const char *format, ...);
功能:从str指定的字符串读取数据,并根据参数fornat字符串来转化并格式化数据
参数:
str:指定的字符串首地址
format:字符串格式,用法和scanf()一样
代码
- #include
- #include
- #include
- #include
- #include
-
- int main0401(void)
- {
- char src[] = "world";
- char dest[] = "hello";
-
- char *p = strcat(dest, src);
-
- printf("p = %s\n", p);
- printf("dest = %s\n", dest); // helloworld
-
- system("pause");
- return EXIT_SUCCESS;
- }
-
- int main0402(void)
- {
- char src[] = "world";
- char dest[6] = "hello";
-
- char *p = strncat(dest, src, 3);
-
- printf("p = %s\n", p);
- printf("dest = %s\n", dest);
-
- printf("%d\n", strlen(dest));
-
- system("pause");
- return EXIT_SUCCESS;
- }
在字符串str中 找一个字符出现的位置。 返回字符在字符串中的地址。
char *strchr(const char *s, int c);
printf("%s\n" strchr("hehehahahoho", 'a')); --> "ahahoho"
自右向左,在字符串str中 找一个字符出现的位置。 返回字符在字符串中的地址。
char *strrchr(const char *s, int c);
printf("%s\n" strrchr("hehehahahoho", 'a')); --> "ahoho"
在字符串str中,找子串substr第一次出现的位置。返回地址。
char *strstr(const char *str, const char *substr);
在字符串中找子串的位置。
printf("%s\n" strrchr("hehehahahoho", "ho")); --> "hoho"
printf("%s\n" strrchr("hehehahahoho", "xixi")); --> NULL
按照既定的分割符,来拆分字符串,按 ‘ . ’ “www.baidu.com” 使用方法strtok("www.baidu.com","k"); -->变成
char *strtok(char *str, const char *delim);
参1: 待拆分字符串
参2: 分割符组成的“分割串”
返回:字符串拆分后的首地址。 “拆分”:将分割字符用 '\0'替换。
特性:
1)strtok拆分字符串是直接在 原串 上操作,所以要求参1必须,可读可写(char *str = "www.baidu.com" 不行!!!)2)第一次拆分,参1 传待拆分的原串。 第1+ 次拆分时,参1传 NULL.
代码
- #include
- #include
- #include
- #include
- #include
-
- int main0701(void)
- {
- char str[] = "www.itcast.cn.com.net"; // www itcast cn
-
- char *p = strtok(str, "."); // 第一次拆分,参1 传 待拆分的原串。
-
- while (p != NULL)
- {
- p = strtok(NULL, "."); // 第1+ 次拆分是,参1传 NULL.
-
- printf("%s\n", p); //输出itcast cn com net (null)
- }
- system("pause");
- return EXIT_SUCCESS;
- }
使用这类函数进行转换,要求,原串必须是可转换的字符串。
错误使用:"abc123" --> 0; "12abc345" ---> 12; "123xyz" -->123
atoi:字符串 转 整数。 int atoi(const char *nptr);
atof:字符串 转 浮点数
atol:字符串 转 长整数
代码
- #include
- #include
- #include
- #include
- #include
-
- static int a = 1034673;
-
- void test1(void)
- {
- static int b = 0;
-
- printf("b = %d\n", b++);
- }
-
-
- int main0801(void)
- {
- char str[] = "abc345";
- int num = atoi(str);
- printf("num = %d\n", num);
-
- char str1[] = " -10";
- int num1 = atoi(str1);
- printf("num1 = %d\n", num1);
-
- char str2[] = "0.123f";
- double num2 = atof(str2);
- printf("num2 = %.2lf\n", num2);
-
- char str3[] = "123L";
- long num3 = atol(str3);
- printf("num3 = %ld\n", num3);
-
- system("pause");
- return EXIT_SUCCESS;
- }