- 论坛徽章:
- 6
|
本帖最后由 craaazy123 于 2014-10-27 14:29 编辑
rt,先贴一下代码,以下是to_lower_case1函数,主要是将字符串转换为小写:
char *to_lower_case1(const char *src) {
if(is_empty(src)) return "";
// 申请堆内存
char *dst = (char *)calloc(strlen(src), sizeof(char *));
// 将原来的拷贝一份
strcpy(dst, src);
char *p = dst;
// 遍历转小写
for(; *p != '\0'; p++) {
if(*p >= 'A' && *p <= 'Z') {
*p += 32;
}
}
return dst;
}
这样调用是比较方便的了,(方式一):
printf("%s\n", to_lower_case1("This is a String."));
较之前的(方式二):
char *src = "This Is A String.";
int len = strlen(src);
char dst[len];
printf("%s\n", to_upper_case(dst, src));
注意to_upper_case函数未贴出,其实和to_lower_case1差不多是一样的。
我比较疑惑的是to_lower_case1返回的指针是需要自己手动释放的,但是如果按照方式一调用,内存会不会释放掉?
贴两个文件,有问题的话,麻烦大家提出来,我是来学习的,谢谢:
string_util.h- #ifndef __STRING_UTIL__
- #define __STRING_UTIL__
- typedef int bool;
- //char **split(const char* src, const char *delim);
- int first_index_of(const char *src, const char *chs);
- int last_index_of(const char *src, const char *chs);
- bool is_empty(const char *s);
- //char *to_lower_case(char *dst, const char *src);
- char *to_lower_case(const char *src);
- char *to_upper_case(const char *src);
- //char *to_upper_case(char *dst, const char *src);
- char *trim(const char *src);
- char *ltrim(const char *src);
- char *rtrim(const char *src);
- char *substr(const char *src, int start, int len);
- void destroy(char *s);
- #define char_at(str, i) (strlen(str) > i) ? *(str + i) : -1
- #endif
复制代码 string_util.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define TRUE 1
- #define FALSE 0
- #include "string_util.h"
- int main(int argc, char** argv) {
- //split("This is a string", " ");
- //printf("%d\n", first_index_of("This is a string.", ""));
- //printf("%d\n", is_empty(""));
- /*char *src = "This Is A String.";
- int len = strlen(src);
- char dst[len];
- printf("%s\n", to_upper_case(dst, src));*/
- char *s = to_lower_case("This is a String.");
- printf("%s\n", s);
- destroy(s);
- /* char *s = substr("This is a string.", 5, -1);
- int l = strlen(s);
- printf("s = %s, len = %d\n", s, l);
- destroy(s);*/
- /* char *s = ltrim(" \t \r \n");
- int l = strlen(s);
- printf("s=%s, len=%d\n", s, l);
- destroy(s);*/
- /*
- char *s = trim(" \t \r \n This is a String. \t \r \n");
- int l = strlen(s);
- printf("s=%s, len=%d\n", s, l);
- destroy(s);*/
- //printf("%c\n", char_at("This is a string.", 1));
- return 0;
- }
- /*char **split(const char* src, const char *delim) {
- if(src == NULL || delim == NULL) return NULL;
- const char *p = src;
- const char **t = NULL;
- for(; *p != '\0'; p++) {
-
- }
-
- return NULL;
- }*/
- int first_index_of(const char *src, const char *chs) {
- if(is_empty(src) || is_empty(chs))
- return -1;
- const char *p = src;
- const char *q = chs;
- int len = strlen(chs);
- int i;
- for(i = 0; *p != '\0' || *q != '\0'; p++, i++) {
- if(*p == *q++) {
- if(*q == '\0') break;
- } else {
- q = chs;
- }
- }
- return (*q == '\0') ? (i - len + 1) : -1;
- }
- int last_index_of(const char *src, const char *chs) {
- if(is_empty(src) || is_empty(chs))
- return -1;
-
- }
- bool is_empty(const char *s) {
- return (s == NULL || s == "");
- }
- /*char *to_lower_case(char *dst, const char *src) {
- if(is_empty(src)) {
- strcpy(dst, "");
- return dst;
- }
-
- strcpy(dst, src);
- char *p = dst;
- for(; *p != '\0'; p++) {
- if(*p >= 'A' && *p <= 'Z') {
- *p += 32;
- }
- }
- return dst;
- } */
- /*char *to_upper_case(char *dst, const char *src) {
- if(is_empty(src)) {
- strcpy(dst, "");
- return dst;
- }
- strcpy(dst, src);
- char *p = dst;
- for(; *p != '\0'; p++) {
- if(*p >= 'a' && *p <= 'z') {
- *p -= 32;
- }
- }
- return dst;
- }
- */
- char *to_lower_case(const char *src) {
- if(is_empty(src)) return "";
- char *dst = (char *)calloc(strlen(src), sizeof(char));
- strcpy(dst, src);
- char *p = dst;
- for(; *p != '\0'; p++) {
- if(*p >= 'A' && *p <= 'Z') {
- *p += 32;
- }
- }
- return dst;
- }
- char *to_upper_case(const char *src) {
- if(is_empty(src)) return "";
- char *dst = (char *)calloc(strlen(src), sizeof(char));
- strcpy(dst, src);
- char *p = dst;
- for(; *p != '\0'; p++) {
- if(*p >= 'a' && *p <= 'z') {
- *p -= 32;
- }
- }
- return dst;
- }
- char *ltrim(const char* src) {
- if(is_empty(src))
- return "";
- const char *p = src;
- while(*p++ != '\0' && isspace(*p))
- ;
- int len = strlen(p);
- if(len > 0) {
- char *dst = (char *)calloc(len, sizeof(char *));
- strcpy(dst, p);
- return dst;
- }
- return "";
- }
- char *rtrim(const char* src) {
- if(is_empty(src))
- return "";
- int len = strlen(src);
- const char *p = src + len;
- int i;
- for(i = len - 1; i >= 0 && isspace(*(src + i)); i--)
- ;
- if(i > 0) {
- char *dst = (char *)calloc(i + 1, sizeof(char *));
- strncpy(dst, src, i + 1);
- return dst;
- }
- return "";
- }
- char *trim(const char* src) {
- return rtrim(ltrim(src));
- }
- char *substr(const char *src, int start, int len) {
- if(is_empty(src))
- return "";
- int n = strlen(src);
- if(n < start)
- return "";
- const char *p = src;
- int i;
- for(i = 0; i < start; i++, p++)
- ;
- char *dst = (char *)calloc((n - start + 1), sizeof(char));
-
- if(len > 0){
- strncpy(dst, p, len);
- } else {
- strcpy(dst, p);
- }
- return dst;
- }
- void destroy(char * s) {
- if(s == NULL) return;
- if(strlen(s) > 0) free(s);
- s = NULL;
- }
复制代码 |
|