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
posted @ 2018-12-13 09:58  saintdingtheGreat  阅读(678)  评论(0编辑  收藏  举报