字符串与指针的技巧
代码都注释掉了,想试哪段解除注释就好了,都测试过,都没问题,写的过程中最大的问题就是申请指针,最好提前分配空间,否则程序容易意外终止!!希望大家也切忌,程序意外终止最好考虑一下指针未申请空间的问题。
// 指针与字符串
// 字符串的结束不同于数组,数组需要知道长度,字符串末尾结束永远是'\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;
}
————————————编程之路,你我相伴————————————