字符串的一些问题总结

来源:互联网 发布:商品数据分析管理书籍 编辑:程序博客网 时间:2024/06/05 15:09

/* 

要求如下: 


1 找出在一串连续的01字符串中 ,01字符中 0和1 连续出现 的最大次数。
例如 : 000111100101011001010101010101110  

*/

#include <stdio.h>#include <stdlib.h>void  calculate (const char* str ,int* max0,int *max1){//通过传入 两个指针变量 可以带回两个值,相当于 返回两个值int  temp0 = 0;//用来记录连续0 的次数int  temp1 = 0;//用来记录连续1 的次数while  (*str ){if (*str =='0'){(*max0) ++;if(*(++str) =='1'){if (temp0<*max0){// 更新temp0的值temp0 = *max0;}*max0  =0;//重新置0,以便寻找下一个可能比较大的连续出现的次数}}else if (*str =='1'){(*max1) ++;if (*(++str)=='0'){if (temp1<*max1){//更新temp1的值temp1 = *max1;}*max1 = 0;}}}*max0 = temp0;//将值 通过指针带回*max1 = temp1;//将值 通过指针带回}
来测试一下

void main (){char string[] = "0001111110010";int max0 =0;int max1 = 0;calculate (string,&max0,&max1);printf ("max0  is  %d  \n ",max0);printf  ("max1 is  %d   \n  ",max1);system("pause");}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*
2 编程实现 两个 任意长度的正整数 相加  ,
  注:其实就是字符串的相加问题,进行进位处理。


  */

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>char * addBigInt(char* num1, char* num2){int c = 0; // 保留 要进位的数字int i = strlen(num1) - 1;//最低位的下标int j = strlen(num2) - 1;//最低位的下标int maxLength = strlen(num1) > strlen(num2) ? strlen(num1) + 1 : strlen(num2) + 1;  //得到相加后可能的最大位数,相加后可能会产生进位char  *  res = (char*)malloc(maxLength + 1);// 多出一位用来存放 结束符'\0'if (res == NULL){printf("malloc  error !\n");exit(-1);}res[maxLength] = '\0';int  k = strlen(res) - 1;//表示结果的最低位while ((i >= 0) && (j >= 0)){res[k] = ((num1[i] - '0') + (num2[j] - '0') + c) % 10 + '0';/*实际上就是把数字字符转换为数字,之后两个数字相加对10取余可以得到本位的值, +'0' :就是把数字转换为字符 */c = ((num1[i] - '0') + (num2[j] - '0') + c) / 10;// 进位值--j;--i;--k;}while (i >= 0){//把剩余的位数 进行相应的转化。res[k] = (num1[i] - '0' + c) % 10 + '0';c = ((num1[i] - '0' + c)) / 10;--i;--k;}while (j >= 0){//把剩余的位数 进行相应的转化res[k] = (num2[j] - '0' + c) % 10 + '0';c = ((num1[j] - '0' + c)) / 10;--j;--k;}res[0] = c + '0';//最高位数字字符if (res[0] != '0')//最高位进位了,res 就不等于0 {return  res;}else{//最高位没有进位res = res + 1;return   res;}}

下面写一个测试程序。

void  main(){char   str1[] = "111111111111111";char   str2[] = "222222222222222";char   str3[] = "1234";char* result = NULL;result = addBigInt(str1, str2);printf("  %s + %s =  %s\n", str1, str2, result);result = addBigInt(str2, str3);printf("\n  %s + %s =  %s\n", str2, str3, result);system("pause");}




如果各位朋友发现程序有什么问题,欢迎大家一起交流。




0 0
原创粉丝点击