简明C库Notes
一、输入输出
代码解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <stdio.h> int main () { int a; long long int b; double f; char ch; char str[255 ]; scanf ("%d %c %s" , &a, &ch, str); scanf ("%lld" , &b); scanf ("%f" , &f); getchar(ch); gets(str); printf ("%d %c %s" , a, ch, str); printf ("%lld" , b); printf ("%5.2f" , &f); putchar (ch); puts (str); return 0 ; }
二、内存分配
代码解释
1 2 3 4 5 6 7 8 9 10 L->elem = (ElemType*)malloc (LIST_INIT_SIZE * sizeof (ElemType)); ElemType* newbase; newbase = (ElemType*)realloc (L->elem, (L->listsize + LISTINCREMENT) * sizeof (ElemType));
三、字符串处理C版
代码解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <string.h> char option[255 ];scanf ("%s" , option);if (strcmp (option, "insert" )==0 ) { .... } char str1[255 ], str2[255 ];scanf ("%s" , str1);strcpy (str2, str1); char s1[255 ];scanf ("%s" , s1);int len = strlen (s1);char Str1[255 ], Str[255 ];scanf ("%s" , Str1);scanf ("%s" , Str2);strcat (Str1, Str2); char STR[255 ] = "abcdef" ;char ch = 'd' ;char *ptr;ptr = strchr (STR, ch); if (ptr!=NULL ){ printf ("位置:%ld,输出:%s" , ptr-str+1 , ptr); } else { printf ("没有找到" ); }
四、字符串处理C++版
初步认识
string 变量可以直接通过赋值操作符=
进行赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream> #include <string> using namespace std;int main () { string s1; string s2 = "c plus plus" ; string s3 = s2; string s4 (5 , 's' ) ; string s; cin>>s; cout<<s<<endl; return 0 ; }
运行结果:
abcd efgh↙
abcd
虽然我们输入了两个由空格隔开的网址,但是只输出了一个,这是因为输入运算符>>
默认会忽略空格,遇到空格就认为输入结束,所以最后输入的efgh
没有被存储到变量 s。
代码解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 string s = "abcd" ; int len = s.length (); s[5 ] = '5' ; string s1 = "first " ; string s2 = "second " ; char *s3 = "third " ;char s4[] = "fourth " ;char ch = '@' ;string s5 = s1 + s2; string s6 = s1 + s3; string s7 = s1 + s4; string s8 = s1 + ch; string s1, s2; s1 = "1234567890" ; s2 = "aaa" ; s1.insert (5 , s2); string s1, s2, s3; s1 = s2 = "1234567890" ; s1.erase (5 ); s2.erase (5 , 3 ); string s1 = "first second third" ; string s2; s2 = s1.substr (6 , 6 ); string s1 = "first second third" ; string s2 = "second" ; int index = s1.find (s2,5 ); string path = "D:\\demo.txt" ; FILE *fp = fopen (path.c_str (), "rt" );
数字字符
1 2 3 4 5 string s = to_string (200 ); int a = stoi (s);
五、C 标准库 <stdarg.h>
stdarg.h 头文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。
可变参数的函数通在参数列表的末尾是使用省略号(,…)定义的。
库变量
变量
描述
va_list
这是一个适用于 va_start()、va_arg() 和 va_end() 这三个宏存储信息的类型。
库宏
宏
描述
void va_start(va_list ap, last_arg)
这个宏初始化 ap 变量,它与 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。
type va_arg(va_list ap, type)
这个宏检索函数参数列表中类型为 type 的下一个参数。
void va_end(va_list ap)
这个宏允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end ,则结果为未定义。
va_start
1 2 3 4 5 6 7 8 9 10 1. 描述C 库宏 void va_start (va_list ap, last_arg) 初始化 ap 变量,它与 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。 这个宏必须在使用 va_arg 和 va_end 之前被调用。 2.声明 void va_start (va_list ap, last_arg) ;3. 参数ap -- 这是一个 va_list 类型的对象,它用来存储通过 va_arg 获取额外参数时所必需的信息。 last_arg -- 最后一个传递给函数的已知的固定参数。
var_arg
1 2 3 4 5 6 7 8 9 10 11 12 1. 描述C 库宏 type va_arg (va_list ap, type) 检索函数参数列表中类型为 type 的下一个参数。它无法判断检索到的参数是否是传给函数的最后一个参数。 2.声明 type va_arg (va_list ap, type) 3.参数 ap -- 这是一个 va_list 类型的对象,存储了有关额外参数和检索状态的信息。该对象应在第一次调用 va_arg 之前通过调用 va_start 进行初始化。 type -- 这是一个类型名称。该类型名称是作为扩展自该宏的表达式的类型来使用的。 4.返回值 该宏返回下一个额外的参数,是一个类型为 type 的表达式。
var_end
1 2 3 4 5 6 7 8 1. 描述C 库宏 void va_end (va_list ap) 允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end,则结果为未定义。 2.声明 void va_end (va_list ap) 3.参数 ap -- 这是之前由同一函数中的 va_start 初始化的 va_list 对象。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <stdarg.h> #include <stdio.h> int sum (int , ...) ;int main (void ) { printf ("10、20 和 30 的和 = %d\n" , sum (3 , 10 , 20 , 30 ) ); printf ("4、20、25 和 30 的和 = %d\n" , sum (4 , 4 , 20 , 25 , 30 ) ); return 0 ; } int sum (int num_args, ...) { int val = 0 ; va_list ap; int i; va_start (ap, num_args); for (i = 0 ; i < num_args; i++) { val += va_arg (ap, int ); } va_end (ap); return val; }
运行结果:
1 2 10、20 和 30 的和 = 60 4、20、25 和 30 的和 = 79