c中常用的字符串操作
头文件:<string.h>
1.strchr()查找某字符在字符串中首次出现的位置
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。
提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr()
函数。
void teststrchr(char* str,char ch){
char *pch;
pch=strchr(str,ch);
while (pch!=NULL)
{
printf ("found at %d\n",pch-str+1);
pch=strchr(pch+1,ch);
}
}
2.strrchr()查找某字符在字符串中最后一次出现的位置
strrchr() 函数用于查找某字符在字符串中最后一次出现的位置,其原型为:char * strrchr(const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strrchr() 将会找出 str 字符串中最后一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到就返回该字符最后一次出现的位置,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。
提示:如果希望查找某字符在字符串中第一次出现的位置,可以使用 strchr()
函数。
void teststrrchr(char* str, char ch){
char *pch;
pch = strrchr(str,ch);
printf ("Last occurence of ‘s‘ found at %d \n",pch-str+1);
}
3.strstr()返回字符串中首次出现子串的地址
strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:char *strstr( char *str, char * substr );
【参数说明】str为要检索的字符串,substr为要检索的子串。
【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
void teststrstr(char* str, const char* substr){
char *pch;
pch = strstr(str,substr);
if(NULL != pch)
strncpy(pch,"sample",6);
puts(str);
}
4.strtok()字符串分割
定义函数:char * strtok(char *s, const char *delim);
函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用则将参数s 设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL。
void teststrtok(char* str, const char* delim){
char *pch;
pch = strtok(str,delim);
while(NULL != pch){
printf("%s\n",pch);
pch = strtok(NULL,delim);
}
}
测试完整代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void teststrchr(char* str,char ch){
printf("----------------strchr------------------\r\n");
char *pch;
pch=strchr(str,ch);
while (pch!=NULL)
{
printf ("found at %d\n",pch-str+1);
pch=strchr(pch+1,ch);
}
}
void teststrrchr(char* str, char ch){
printf("----------------strrchr-----------------\r\n");
char *pch;
pch = strrchr(str,ch);
printf ("Last occurence of ‘s‘ found at %d \n",pch-str+1);
}
void teststrstr(char* str, const char* substr){
printf("----------------strrstr-----------------\r\n");
char *pch;
pch = strstr(str,substr);
if(NULL != pch)
strncpy(pch,"sample",6);
puts(str);
}
void teststrtok(char* str, const char* delim){
printf("----------------strrtok-----------------\r\n");
char *pch;
pch = strtok(str,delim);
while(NULL != pch){
printf("%s\n",pch);
pch = strtok(NULL,delim);
}
}
int main(){
char str[] = "-This is a simple string.";
printf ("Looking for the ‘s‘ character in \"%s\"...\n",str);
teststrchr(str,‘s‘);
teststrrchr(str,‘s‘);
teststrstr(str,"simple");
teststrtok(str," -.");
system("pause");
return 0;
}
运行结果: