C语言字符串追加,双色球等案例
//C语言中没有字符串概念,有的只是字符型数组,以str1[]的值为例,该字符数组的长度为11---》包含了字母,空格,以及结束字符'\0'(斜杠0)
//基于上述原因,读取一个字符型数组的有效方法是,循环读取每一个字符,直到读到'\0'为止,注意\0一定要以单引号包裹,否则,将会被识别为由'\'和'0'组成的字符数组!!!切记
int main() { char str1[] = "i love cpc,"; char str2[] = "to hell with motherfuck zhaoxiaoqiang"; char finalret[200]; int len = sizeof(str1); printf("%d",len); int index = 0; while(str1[index]!='\0') { finalret[index] = str1[index]; index++;//循环最终会循环到str1的结束字符'\0' } finalret[index] = '\0'; printf("%s\n", finalret); while (str2[index-len+1] != '\0') { finalret[index] = str2[index - len + 1]; index++; } finalret[index] = '\0';//由于先前定义了字符数组finalret的长度为200,如果不在有效字符后加'\0'则下一行打印命令,不足200的部分将用杂乱字符补齐(中文字符'烫')十分不雅, printf("%s", finalret); system("pause"); return EXIT_SUCCESS; }
- C语言里面生成随机数
//动用了time头文件和srand函数,因为时间每一秒都不一样,能够最大程度上的模拟随机值(而不是那种伪随机,生成的数具有很大的重复性)
#include <stdio.h> #include <time.h> #include <stdlib.h> void main() { srand((unsigned int) time(NULL)); for (int i = 0; i < 8; i++) { printf("%d",rand()%8);//使用窍门,如果要生成8以内的随机数,则随机数对8取余,如果生成33以内的随机数则对33取余......
//printf("%d",rand()%10+50);//为了避免生成的值过于离散,也可以稍作修饰,例如生成50左右的随机值
printf("\n"); } system("pause"); }
- 双色球问题:双色球前6个数(红球)从1-33里面挑选,最后一个数(蓝球)从1-16里面选(并按照从小到大排列),其中,1-33里的数不能重复,1-16中的数无所谓
#include <stdio.h> #include <time.h> #include <stdlib.h> void main() { srand((unsigned int)time(NULL)); int fore6[7]; for (int i = 0; i < 6; i++) { fore6[i] = rand() % 33+1; for (int j = 0; j <i; j++) { if (fore6[i] ==fore6[j] ) { i--; continue; } } } for (int i = 0; i < 6; i++) { for (int j = 0; j < 6-i-1; j++) { if (fore6[j] > fore6[j + 1]) { int temp = fore6[j]; fore6[j] = fore6[j + 1]; fore6[j + 1] = temp; } } } fore6[6] = rand() % 16+1; for (int i =0;i<7;i++) { printf("%d\t", fore6[i]); } system("pause"); }
- 由于scanf和gets无法预知字符串大小,遇到换行符或‘\0'才会停止输出所以可能导致数组越界(缓冲区溢出)
gets:从标准设备获得输入字符,包括空格,直到遇到换行符或终止符为止
puts:从标准设备输出一个字符串,自带换行
fgets(字符指针 字符指针对应的数组大小 输入流)获取字符串,如果输入大小大于原始指针对应的区域大小,会在字符串输入完成时自动加上'\0' '\n';小于等于时加上'\0'
- string.h下的函数strcpy()和strlen()
strlen()遇到he\0llo中的\0就终止了因此有效字符数为2,注意如果字符中有\n也算作一个字节
- strcpy(目标字符串,源字符串)--- if strcpy(目标地址,源地址)!=NULL 拷贝成功
- strncpy(目标字符串,源字符串,拷贝个数)拷贝n个字符数
- strcat追加至数组结尾
先去掉\0再追加,再加上\0
- strcmp() 比较和有限个字符间比较strncmp()ASCII码
- strstr strchr strtok----strtok切割字符串时会破坏字符串的完整性在分割的部位添加‘\0’表示结束
- atoi atof atol