字符串分割 函数实现
char ** strsplit(char *line, char delimeter, int *count, int limit)//
line是传入字符串
delimeter是用来进行分割的字符
count是一个用来计数的变量,传入传出,函数执行完之后,表示将line分成的字符串个数
limit用来限制分割次数,函数从左至右进行分割,如果值设置过大,表示不限制;
例如limit=2,但line中有多个delimeter,则line也只分割一次,从第一个delimeter处分割开来!
#include <iostream> // std::cout #include<string> using namespace std; char * strim(char *str)//去掉两端空格 { char *end, *sp, *ep; size_t len; sp = str; end = ep = str + strlen(str) - 1; while (sp <= end && isspace(*sp)) sp++; while (ep >= sp && isspace(*ep)) ep--; len = (ep < sp) ? 0 : (ep - sp) + 1; sp[len] = '\0'; return sp; } char ** strsplit(char *line, char delimeter, int *count, int limit)// { char *ptr = NULL, *str = line; char **vector = NULL; *count = 0; while ((ptr = strchr(str, delimeter))) { *ptr = '\0'; vector = (char **)realloc(vector, ((*count) + 1)*sizeof(char *)); vector[*count] = strim(str); str = ptr + 1; (*count)++; if (--limit == 0) break; } if (*str != '\0') { vector = (char **)realloc(vector, ((*count) + 1)*sizeof(char *)); vector[*count] = strim(str); (*count)++; } return vector; } int main() { char** res = NULL; int count = 0; char line[] = "wo*hello*world*love";//这儿如果是char* line,则表示line是一个指向常量字符串数组的首字符,不允许更改!!! res = strsplit(line, '*', &count, 3); while (count-->0){ cout << *res << endl; res++; } res = NULL;//注意,最后res已经越界了 system("pause"); return 0; }
char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL
在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#include<string.h>
strchr函数原型:char * strchr(char * str, int ch); 功能就是找出在字符串str中第一次出项字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是 null)。
strstr 函数原型: char * strstr(char * str1,char * str2);功能就是找出在字符串str1中第一次出现字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)。
手里拿着一把锤子,看什么都像钉子,编程界的锤子应该就是算法了吧!