1          字符串与字符数组

1.1       字符数组定义

char array[100];

1.2       字符数组初始化

char array[100] = {'a', 'b', 'c','d'};

char array[100] = "abcd";

char array[100] = { 0 };

char array[] = "abcd";

1.3       字符数组使用

1.4       随机数产生函数rand与srand

头文件stdlib.h

Rand是伪随机数产生器,每次调用rand产生的随机数是一样的

如果调用rand之前先调用srand就出现任意的随机数

只要能保证每次调用srand函数的时候,参数的值是不同的,那么rand函数就一定会产生不同的随机数

#include <time.h>

int t = (int)time(NULL);

srand(t);

for (int i = 0; i < 10; i++)

{

printf("%d\n", rand());

}

 

 

1.5       用scanf输入字符串

char s[10] = { 0 };

scanf("%s", s);//"%s"的作用就是输入一个字符串的,scanf是以回车键作为输入完成标示的,但回车键本身并不会作为字符串的一部分

//如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃

int i;

for (i = 0; i < 10; i++)

{

printf("%d\n", s[i]);

}

printf("----------------------------------\n");

printf("%s\n", s);

return 0;

1.6       字符串的结束标志

Scanf将回车,空格都认为是字符串输入结束标志,

1.7       字符串处理函数

1.7.1          gets

char s[100] = { 0 };

gets(s);//gets认为回车的输入结束标示,空格不是输入结束标示,所以用gets这个函数就可以实现输入带空格的字符串

//gets和scanf一样存在缓冲区溢出的问题

int i;

for (i = 0; i < 10; i++)

{

printf("%d\n", s[i]);

}

printf("----------------------------------\n");

printf("%s\n", s);

Gets不能用类似“%s”或者“%d”之类的字符转义,只能接受字符串的输入

1.7.2          fgets函数

gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,fgets函数改进了这个问题。

由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

char s[100] = { 0 };

fgets(s, sizeof(s), stdin);

1.7.3          puts函数

puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’

char s[] = "hello world";

puts(s);

1.7.4          fputs函数

fputs是puts的文件操作版本,

char s[] = "hello world";

fputs(s, stdout);

1.7.5          strlen,字符串长度

size_t  strlen(const char * _Str);

返回不包含字符串结尾’\0’的字符串长度

char s[100] = "hello world";

int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0)

printf("len = %d\n", len);

return 0;

1.7.6          strcat,字符串追加

size_t  strcat(char * _Str1, const char * _Str2);

将参数_Str2追加到_Str1后尾

char s[1024] = "hello world";

int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0)

printf("len = %d\n", len);

char s1[100] = "abc123456789";

strcat(s, s1);//将两个字符串合并,结果放入第一个参数里面,strcat也存在缓冲区溢出的问题

printf("%s\n", s);

1.7.7          strncat,字符串有限追加

size_t  strncat(char * _Str1, const char * _Str2, size_t len);

1.7.8          strcmp,字符串比较

int strcmp(const char * _Str1, const char * _Str2);

比较两个字符串是否相等,相等返回0,不等返回非0

1.7.9          strncmp,字符串有限比较

1.7.10      strcpy字符串拷贝

char *strcpy(char * _Str1, const char * _Str2);

将参数_Str2拷贝到参数_Str1中

1.7.11      strncpy字符串有限拷贝

1.7.12      sprintf,格式化字符串

和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串

1.7.13      Sscanf函数

Sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入

1.7.14      strchr查找字符

char * strchr(char * _Str, int _Ch);

在参数_str中查找参数_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;

1.7.15      strstr查找子串

char * strstr(char * _Str, const char * _SubStr)

在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;

 

1.7.16      strtok分割字符串

字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

char buf[] = "abc@defg@igk";

char *p = strtok(buf, "@");

while (p)

{

printf("%s\n", p);

p = strtok(NULL, "@");

}

1.7.17      atoi转化为int

需要包含头文件stdlib.h

1.7.18      atof转化为float

1.7.19      atol转化为long

#include <stdio.h>

int main01()
{
//char array[100] = {'a', 'b', 'c','d'};
//char array[100] = "abcd";
//char array[100] = { 0 };
char array[] = "hello world";
//array[0] = 'a';
//array[4] = 0
printf("%d\n", sizeof(array)); int i;
int j;
for (i = ; i < (sizeof(array)-); i++)
{
for (j = ; j < ((sizeof(array)-) - i);j++)
{
if (array[j - ] > array[j])
{
char tmp = array[j];
array[j] = array[j - ];
array[j - ] = tmp;
}
}
} printf("%s\n", array);
return ;
} int main()//字符串逆置
{
char str[] = "你好世界";
int i = ;
while (str[i++]);//求字符串有多长 int min = ;
int max = i - ;
while (min < max)
{
char tmp = str[min];
str[min] = str[max];
str[max] = tmp;
min++;
max--;
}
printf("%s\n", str);
return ;
}

资料来源:传智播客  仅供学习研究

2_C语言中的数据类型 (十)数组的更多相关文章

  1. 2_C语言中的数据类型 (九)数组

    1          数组 1.1       一维数组定义与使用 int array[10];//定义一个一维数组,名字叫array,一共有10个元素,每个元素都是int类型的 array[0] = ...

  2. 2_C语言中的数据类型 (十)while、for

    1          循环语句 1.1       while while(条件),如果条件为真,循环继续,条件为假,循环结束 while (1)..是死循环的写法 1.2       continu ...

  3. 2_C语言中的数据类型 (七)printf与scanf

    1          字符串格式化输出和输入 1.1       字符串在计算机内部的存储方式 字符串是内存中一段连续的char空间,以’\0’结尾 “”是C语言表达字符串的方式 1.2       ...

  4. 2_C语言中的数据类型 (四)整数与无符号数

    1.1       sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1       int类型 1.1.1      ...

  5. 2_C语言中的数据类型 (一)2.1.常量和字符串常量

    2.1 常量就是在程序中不可变化的量,常量在定义的时候必须给一个初值. 1.1.1          #define 定义一个宏常量 1.1.2          const 定义一个const常量 ...

  6. 2_C语言中的数据类型 (九)逻辑运算符与if语句、switch、条件运算符?、goto语句与标号

    1          条件分支语句 1.1       关系运算符 在C语言中0代表false,非0代表真 1.1.1          < 小于 1.1.2          <= 小于 ...

  7. 2_C语言中的数据类型 (八)运算符

    1          运算符表达式和语句 1.1       基本运算符 1.1.1          = 数据对象:泛指数据在内存的存储区域 左值:表示可以被更改的数据对象 右值:能赋给左值的量 1 ...

  8. 2_C语言中的数据类型 (二)进制

    1.1       二进制数.位.字节与字 我们习惯于十进制的数:10,12等 一个位只能表示0,或者1两种状态,简称bit,一个位是一个bit 一个字节为8个二进制,称为8位,简称BYTE,8个比特 ...

  9. 2_C语言中的数据类型 (七)类型限定

    1.1       类型限定 1.1.1          const const是代表一个不能改变值的常量 1.1.2          volatile 代表变量是一个可能被CPU指令之外的地方改 ...

随机推荐

  1. 【three.js练习程序】旋转、缩放场景

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. SQL2005中的事务与锁定(九)-(1)- 转载

    ------------------------------------------------------------------------ -- Author : HappyFlyStone - ...

  3. python容错

    #try: except: else: #为什么叫容错呢,先说说错误,这里说的错误并不是因为马虎或者什么原因在脚本中留下的bug,这个不能容掉,所谓容掉就是略过这个错误,要在测试时候发现并修正,需要容 ...

  4. USB AUDIO Device CLASS Requests

    写在前面 本文翻译自 USB Device Class Definition for Audio Devices 1998年版.主要是鄙人个人使用,所以只挑对我有用的翻译.有些我认为不是很重要的可能就 ...

  5. Django之基于iframe的ajax伪造

    IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME).iframe元素会创建包含另外一个文档的内联框架 ajax的理念是不进行浏览器页面刷新的信息获取更新,也就是局部刷新. 那 ...

  6. JVM学习笔记-JVM模型

    JVM学习笔记 == 标签(空格分隔): jvm 学习笔记全部来自于<深入理解java虚拟机>总结 jvm内存示意图 虚拟机栈(Java Virtual Machine Stacks): ...

  7. VS2010使用Release进行调试的三个必须设置选项

    How to: Debug a Release Build You can debug a release build of an application. To debug a release bu ...

  8. Difference between HashMap and Hashtable | HashMap Vs Hashtable

    Both the HashMap and Hashtable implement the interface java.util.Map but there are some slight diffe ...

  9. 【转】Linux下从TCP状态机,三次握手判断DDOS攻击

    从TCP状态机判断DDOS攻击 一.TCP协议 TCP 协议是传送层的核心协议,提供了可靠面向连接的协议,分为三次握手和四次断开,在这个过程中TCP有个状态机,记录不同阶段的状态. 二. TCP握手和 ...

  10. glViewport()函数和glOrtho()函数的理解(转)

    http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html 在OpenGL中有两个比较重要的投影变换函数,glViewport ...