Android NDK开发(C语言字符串)
1.C语音的字符串有两种
1.1字符数组
数组可以修改其中某一个值,不可以整体赋值。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <Windows.h> //使用字符数组存储字符串 void main() { //三种写法 //\0代表 结束符 char str[] = { 'h','e','l','l','o','\0' }; //char str[6]= { 'h','e','l','l','o' }; //char str[10] = "hello"; printf("%s\n", str); //地址 printf("%#x\n", str); getchar(); }
结果输出:
hello
0xb3fb78
1.2字符指针
字符指针不可以修改其中某一个值,可以整体赋值。使用指针加法,结合结束符,可以进行截取。
void main() { char *str = "how are you?"; printf("%s\n", str); //str[1] = "w" ; //字符指针不可以修改其中某一个值 str = "hello world"; printf("%s\n", str); printf("%#x\n", str); //使用指针加法,截取字符串 str += 3; //指向第四个字符首地址 while (*str) { printf("%c", *str); str++; } getchar(); }
结果输出:
how are you?
hello world
0x97b44
lo world
2.字符串常用的方法
相关的头文件:#include <string.h>
2.1strcpy字符串拼接
原型:extern char *strcpy(char *dest,char *src);
功能:把src
所指由NULL结束的字符串复制到dest
所指的数组中。
说明:src和dest
所指内存区域不可以重叠且dest
必须有足够的空间来容纳src的字符串。
返回指向dest
的指针。
举例:
void main(void){ char dest[50]; char *a = "china"; char *b = " is powerful!"; strcpy(dest, a); strcat(dest, b); printf("%s\n", dest); system("pause"); }
结果输出:
china is powerful!
2.2strchr字符串中查找字符
原型:extern char *strchr(char *s,char c);
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
void main(void){ char *str = "I want go to USA!"; printf("%#x\n", str); //U元素的指针 //str+3 char* p = strchr(str, 'w'); if (p){ printf("索引位置:%d\n", p - str); } else{ printf("没有找到"); } system("pause"); }
结果输出:
0x877b30
索引位置:2
2.3strchr字符串中查找字符
原型:extern char *strstr(char *haystack, char *needle);
功能:从字符串haystack
中寻找needle
第一次出现的位置(不比较结束符NULL)。
说明:返回指向第一次出现needle
位置的指针,如果没找到则返回NULL。
//strstr 从字符串haystack中寻找needle第一次出现的位置 void main(void){ char *haystack = "I want go to USA!"; char *needle = "to"; //U元素的指针 char* p = strstr(haystack, needle); if (p){ printf("索引位置:%d\n", p - haystack); } else{ printf("没有找到"); } system("pause"); }
结果输出:
索引位置:10
2.4更多用法...
//strset 把字符串s中的所有字符都设置成字符c void main(void){ char str[] = "internet change the world!"; _strset(str,'w'); printf("%s\n",str); system("pause"); } //strrev 把字符串s的所有字符的顺序颠倒过来 void main(void){ char str[] = "internet change the world!"; _strrev(str); printf("%s\n", str); system("pause"); } //atoi 字符串转为int类型 //atol():将字符串转换为长整型值 void main(void){ char* str = "a78"; //int r = atoi(str); printf("%d\n", r); system("pause"); } // 字符串转为double类型 void main(void){ char* str = "77b8b"; char** p = NULL; //char* p = str + 2; //参数说明:str为要转换的字符串,endstr 为第一个不能转换的字符的指针 double r = strtod(str,p); printf("%lf\n", r); printf("%#x\n", p); system("pause"); } //strupr转换为大写 void main(void){ char str[] = "CHINA motherland!"; _strupr(str); printf("%s\n",str); system("pause"); } //转换为小写 void mystrlwr(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 main(void){ char str[] = "CHINA motherland!"; mystrlwr(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'; } //删除最后一个字符 int main() { char str[] = "vencent ppqq"; delchar(str,'t'); printf("%s\n", str); system("pause"); } //Java String replaceAll //StringBuffer buff.deleteCharAt(buff.length()-1); //删除最后一个字符 void main(void){ char str[] = "internet,"; str[strlen(str) - 1] = '\0'; printf("%s\n", str); //作业:realloc实现StringBuffer的拼接,而不是一开始开辟一个很大的数组 //结构体StringBuffer system("pause"); } //memcpy 由src所指内存区域复制count个字节到dest所指内存区域 void main(void){ char src[] = "C,C++,Java"; char dest[20] = {0}; //字节 memcpy(dest,src,5); printf("%s\n",dest); system("pause"); } //memchr 从buf所指内存区域的前count个字节查找字符ch。 void main(void){ char src[] = "C,C++,Java"; char ch = 'C'; //字节 (分段截取) char* p = memchr(src+3, ch, 5); if (p){ printf("索引:%d\n", p - src); } else{ printf("找不到\n"); } system("pause"); } //memmove 由src所指内存区域复制count个字节到dest所指内存区域。 void main(){ char s[] = "Michael Jackson!"; //截取的效果 memmove(s, s + 8, strlen(s) - 8 - 1); s[strlen(s) - 8] = 0; printf("%s\n", s); getchar(); } //在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内 void main(){ char *s1 = "Welcome To Beijing"; char *s2 = "to"; char *p; 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(); }
栏 目:Android代码
本文地址:http://www.codeinn.net/misctech/195277.html