字符串与指针函数等技巧

字符串与指针的技巧

代码都注释掉了,想试哪段解除注释就好了,都测试过,都没问题,写的过程中最大的问题就是申请指针,最好提前分配空间,否则程序容易意外终止!!希望大家也切忌,程序意外终止最好考虑一下指针未申请空间的问题。

// 指针与字符串
// 字符串的结束不同于数组,数组需要知道长度,字符串末尾结束永远是'\0'

#include <stdio.h>
#include <string.h>
int copy_(char *src, char *tar);
int connect(char *s, char *t, char *q);
char * insert_char(char *s, char  *q, int n);
int match(char *a,char *b);
int ptr_string_sort(char *p[],int n);

////利用指针实现字符串复制
//copy_(char *src, char *tar)
//{
//    for(;*src != '\0';)
//    {
//        *tar = *src;
//        tar++;
//        src++;
//    }
//    *tar = '\0';  //添加字符串结束符
//}
//
////字符串连接
//connect(char *s,char *t, char *q)
//{
//    while(*s != '\0')
//    {
//        *q = *s;
//        s++;
//        q++;
//    }
//    *q++ = ' ';
//    while(*t != '\0')
//    {
//        *q = *t;
//        q++;
//        t++;
//    }
//    *q = '\0';
//}
//
////字符串插入
//char *insert_char(char *s, char  *q, int n)
//{
//    char *init_str,*init_s;
//    char *str = (char *)malloc(sizeof(char) * 100);
//    init_str = str;
//    init_s = s;
//    while(*s != '\0')
//    {
//        if(s  == init_s + n-1)
//        {
//            while(*q != '\0')
//                *str++ = *q++;
//            *str++ = *s;
//        }
//        else
//        {
//        *str++ = *s;
//        }
//        s++;
//
//    }
//    *str = '\0';
//    return init_str;
//
//}
//
////字符串匹配
//int match(char *a, char *b)
//{
//    int i = 0,flag = 0;
//    char *a_fst,*a_tmp,*b_tmp;
//    a_fst = a;  a_tmp = a;   b_tmp = b;
//    while(*a++ != '\0')
//    {
//        flag = 1;
//        while(*b_tmp != '\0')
//        {
//            if(*a_tmp != *b_tmp)
//            {
//                flag = 0;
//                break;
//            }
//            a_tmp++;
//            b_tmp++;
//        }
//        if(flag)
//            return i;
//        i++; //从下一个字符比较
//        a_tmp = a_fst+i;    b_tmp = b;  //设置循环初始条件
//    }
//    return -1;
//}
//
////字符串排序
//int ptr_string_sort(char *p[],int n)
//{
//    char *temp;
//    for(int i=0 ; i< n; i++)
//    {
//        for(int j = i + 1 ; j< n; j++)
//            if(strcmp(*(p + i) , *(p + j)) > 0)
//        {
//            temp = p[i];
//            p[i] = p[j];
//            p[j] = temp;
//        }
//    }
//}


int main(void)
{

//    //指针实现字符串复制的代码
//    char *str = "Hello World!";
//    char *p = (char *)malloc(sizeof(char)); //这里一定要给指针分配内存,否则会进程终止错误
//    copy_(str, p);
//    printf("%s\n\n\n",p);
//
//
//    //字符串连接的代码
//    char *str1,*str2,*str3 = (char *)malloc(sizeof(char));
//    str1 = "hello";
//    str2 = "world";
//    connect(str1, str2, str3);
//    printf("%s + %s = %s",str1, str2, str3);
//
//
//    //指针实现字符串插入
//    int pos;
//    char *str_,*src_,*tar_;
//    src_ = "hello world!";
//    tar_ = "every ";
//    printf("\nplease input the position you want to insert:\n");
//    scanf("%d", &pos);
//    str_ = insert_char(src_,tar_,pos);
//    printf("%s",str_);
//
//
//    //指针实现简单字符串匹配
//    char *src = "hello world forever!";
//    char *tar = "world";
//    int number;
//    number = match(src, tar);
//    printf("the start position is : %d", number);
//    printf("\nthe first char is : %c",*(src+number));
//
//    //使用指针的指针输出字符串
//    char *strings[] = { "c language",
//                        "Basic",
//                        "world wide",
//                        "olympic",
//                        "great wall"};
//    char **p_ = strings;       //这里定义单个指针会出现错误,指向指针的指针,由于strings定义的就是一个指针数组
//    for(int i=0; i<5; i++)
//        printf("%s\n",*(p_+i));
//
//
//    //使用指针的指针输出月份号
//    char *month[] = {
//         "January",
//         "February",
//         "March",
//         "April",
//         "May",
//         "June",
//         "Junly",
//         "August",
//         "September",
//         "October",
//         "November",
//         "December"
//    };
//    char **p__ = month;
//    int num;
//    printf("please input a month you want to know: ");
//    scanf("%d", &num);
//    printf("\nThe %dth month is : %s",num, (*(p__ + num)+1)); //输出函数,若输出的是字符串,则应输入的是首地址,检测到'\0'自动结束
//
//
//    //使用指向指针的指针对字符串进行排序
//    char *strings_[] = { "c language",
//                        "basic",
//                        "world wide",
//                        "olympic",
//                        "great wall"};
//
//    char **p___ = strings_;
//    ptr_string_sort(strings_,5);
//    for(int i=0; i< 5; i++)
//        printf("%s \n", *(p___ + i));
    return 0;
}


————————————编程之路,你我相伴————————————
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章