常用字符,整形,浮点型相互装换函…

首先就是memcpy

表头文件: #include

定义函数: void *memcpy(void *dest, const void *src, size_t n)

函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束

返回值  返回指向dest的指针

附加说明: 指针srcdest所指的内存区域不可重叠

例如:

你需要复制串str=wangyucao1989”中的“yucao”,那么可以这么写:

memcpy(newstr,str+4,5);

 

除了memcpy之外,string还提供了strncpy函数:

函数名称: strncpy

函数原型: char *strncpy(char *dest, const char *srcint count)

函数功能: 将字符串src中的count个字符拷贝到字符串dest中去

函数返回: 指向dest的指针

参数说明: dest-目的字符串,src-源字符串,count-拷贝的字符个数

所属文档:

 

还是上面的例子,这个程序可以这样写:

#include

#include

int main()

{

    char str[] = "wangyucao1989";

 

    char newstr[6];

    //memcpy(newstr,str+4,5);

    strncpy(newstr,str+4,5);

    newstr[5] = '\0';

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

    return 0;

}

 

========================================================

位运算:

运算方法有六种:

 

& 与运算

| 或运算

^ 异或运算

~ 非运算(求补)

>> 右移运算

<< 左移运算

 

 

运用这些基本的运算,我们可以解决acm所需的各种运算,Bit1,赋0,给他的值取反,还有好多段操作。如下:

 

 

功能                 示例           | 位运算

-----------------+---------------------+--------------------

去掉最后一位     | (101101->10110)   | x >> 1

在最后加一个   | (101101->1011010) | x < < 1

在最后加一个   | (101101->1011011) | x < < 1+1

把最后一位变成 | (101100->101101)  | x | 1

把最后一位变成 | (101101->101100)  | x | 1-1

最后一位取反     | (101101->101100)  | x ^ 1

把右数第k位变成1 | (101001->101101,k=3) | x | (1 < < (k-1))

把右数第k位变成0 | (101101->101001,k=3) | x & ~ (1 < < (k-1))

右数第k位取反    | (101001->101101,k=3) | x ^ (1 < < (k-1))

取末三位         | (1101101->101)       | x & 7

取末k          | (1101101->1101,k=5)  | x & ((1 < < k)-1)

取右数第k      | (1101101->1,k=4)     | x >> (k-1) & 1

把末k位变成    | (101001->101111,k=4) | x | (1 < < k-1)

k位取反        | (101001->100110,k=4) | x ^ (1 < < k-1)

把右边连续的1变成0 | (100101111->100100000) | x & (x+1)

把右起第一个0变成1 | (100101111->100111111) | x | (x+1)

把右边连续的0变成1 | (11011000->11011111)   | x | (x-1)

取右边连续的     | (100101111->1111)      | (x ^ (x+1)) >> 1

去掉右起第一个1的左边 | (100101000->1000)   | x & (x ^ (x-1))

判断奇数 (x&1)==1

判断偶数 (x&1)==0

取右边第一个1所在位置 x&-x

 

================================================================

类型转换:

函数名: abs : 求整数的绝对值

 : int abs(int i);

程序例:

#include

#include

 

int main(void)

{

  int number = -1234;

 

  printf("number: %d  absolute value: %d\n", number, abs(number));

  return 0;

}

函数名: atof

 : 把字符串转换成浮点数

 : double atof(const char *nptr);

程序例:

#include

#include

 

int main(void)

{

   float f;

   char *str = "12345.67";

 

   f = atof(str);

   printf("string = %s float = %f\n", str, f);

   return 0;

}

 

 

 

函数名: atoi

 : 把字符串转换成长整型数

 : int atoi(const char *nptr);

程序例:

#include

#include

 

int main(void)

{

   int n;

   char *str = "12345.67";

 

   n = atoi(str);

   printf("string = %s integer = %d\n", str, n);

   return 0;

}

 

 

 

函数名: atol

 : 把字符串转换成长整型数

 : long atol(const char *nptr);

程序例:

 

#include

#include

 

int main(void)

{

   long l;

   char *str = "98765432";

 

   l = atol(lstr);

   printf("string = %s integer = %ld\n", str, l);

   return(0);

}

 

===========================================================

其他函数:

函数名: bsearch

 : 二分法搜索

 : void *bsearch(const void *key, const void *base, size_t *nelem,  size_t width, int(*fcmp)(const void *, const *));

程序例:

 

#include

#include

 

#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))

 

int numarray[] = {123, 145, 512, 627, 800, 933};

 

int numeric (const int *p1, const int *p2)

{

   return(*p1 - *p2);

}

 

int lookup(int key)

{

   int *itemptr;

 

  

   itemptr = bsearch (&key, numarray, NELEMS(numarray),

      sizeof(int), (int(*)(const void *,const void *))numeric);

   return (itemptr != NULL);

}

 

int main(void)

{

   if (lookup(512))

      printf("512 is in the table.\n");

   else

      printf("512 isn't in the table.\n");

 

   return 0;

}

函数名: fabs

 : 返回浮点数的绝对值

 : double fabs(double x);

程序例:

 

#include

#include

 

int main(void)

{

   float  number = -1234.0;

 

   printf("number: %f  absolute value: %f\n",

   number, fabs(number));

   return 0;

}

 

函数名: fcvt

 : 把一个浮点数转换为字符串

 : char *fcvt(double value, int ndigit, int *decpt, int *sign);

程序例:

 

#include

#include

#include

 

int main(void)

{

   char *string;

   double value;

   int dec, sign;

   int ndig = 10;

 

   clrscr();

   value = 9.876;

   string = ecvt(value, ndig, &dec, &sign);

   printf("string = %s      dec = %d \

          sign = %d\n", string, dec, sign);

 

   value = -123.45;

   ndig= 15;

   string = ecvt(value,ndig,&dec,&sign);

   printf("string = %s dec = %d sign = %d\n",

          string, dec, sign);

 

 

   value = 0.6789e5;

   ndig = 5;

   string = ecvt(value,ndig,&dec,&sign);

   printf("string = %s           dec = %d\

          sign = %d\n", string, dec, sign);

 

   return 0;

}

 

函数名: gcvt

 : 把浮点数转换成字符串

 : char *gcvt(double value, int ndigit, char *buf);

程序例:

 

#include

#include

 

int main(void)

{

   char str[25];

   double num;

   int sig = 5;

 

  

   num = 9.876;

   gcvt(num, sig, str);

   printf("string = %s\n", str);

 

  

   num = -123.4567;

   gcvt(num, sig, str);

   printf("string = %s\n", str);

 

  

   num = 0.678e5;

   gcvt(num, sig, str);

   printf("string = %s\n", str);

 

   return(0);

}

函数名: itoa

 : 把一整数转换为字符串

 : char *itoa(int value, char *string, int radix);

程序例:

 

#include

#include

 

int main(void)

{

   int number = 12345;

   char string[25];

 

   itoa(number, string, 10);

   printf("integer = %d string = %s\n", number, string);

   return 0;

}

 

函数名: labs

 : 取长整型绝对值

 : long labs(long n);

程序例:

 

#include

#include

 

int main(void)

{

   long result;

   long x = -12345678L;

 

   result= labs(x);

   printf("number: %ld abs value: %ld\n",

      x, result);

 

   return 0;

}

函数名: memcpy

 : 从源source中拷贝n个字节到目标destin

 : void *memcpy(void *destin, void *source, unsigned n);

程序例:

 

#include

#include

int main(void)

{

   char src[] = "******************************";

   char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";

   char *ptr;

   printf("destination before memcpy: %s\n", dest);

   ptr = memcpy(dest, src, strlen(src));

   if (ptr)

      printf("destination after memcpy:  %s\n", dest);

   else

      printf("memcpy failed\n");

   return 0;

}

函数名: memset

 : 设置s中的所有字节为ch, s数组的大小由n给定

 : void *memset(void *s, char ch, unsigned n);

程序例:

 

#include

#include

#include

 

int main(void)

{

   char buffer[] = "Hello world\n";

 

   printf("Buffer before memset: %s\n", buffer);

   memset(buffer, '*', strlen(buffer) - 1);

   printf("Buffer after memset:  %s\n", buffer);

   return 0;

}

函数名: pow : 指数函数(xy次方)

 : double pow(double x, double y);

程序例:

 

#include

#include

 

int main(void)

{

   double x = 2.0, y = 3.0;

 

   printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));

   return 0;

}

 

 

 

函数名: qsort

 : 使用快速排序例程进行排序

 : void qsort(void *base, int nelem, int width, int (*fcmp)());

程序例:

 

#include

#include

#include

 

int sort_function( const void *a, const void *b);

 

char list[5][4] = { "cat", "car", "cab", "cap", "can" };

 

 

int main(void)

{

   int  x;

 

   qsort((void *)list, 5, sizeof(list[0]), sort_function);

   for (x = 0; x < 5; x++)

      printf("%s\n", list[x]);

   return 0;

}

 

int sort_function( const void *a, const void *b)

{

   return( strcmp(a,b) );

}

 

函数名: sqrt

 : 计算平方根

 : double sqrt(double x);

程序例:

 

#include

#include

 

int main(void)

{

    double x = 4.0, result;

 

    result = sqrt(x);

    printf("The square root of %lf is %lf\n", x, result);

    return 0;

}

========================================================

 

字符串函数:

函数名: sscanf

 : 执行从字符串中的格式化输入

 : int sscanf(char *string, char *format[,argument,...]);

程序例:

 

#include

#include

 

int main(void)

{

   char label[20];

   char name[20];

   int entries = 0;

   int loop, age;

   double salary;

 

   struct Entry_struct

   {

      char  name[20];

      int   age;

      float salary;

   } entry[20];

 

 

   printf("\n\nPlease enter a label for the chart: ");

   scanf(" s", label);

   fflush(stdin); 

 

 

   printf("How many entries will there be? (less than 20) ");

   scanf("%d", &entries);

   fflush(stdin);  

 

 

   for (loop=0;loop

   {

      printf("Entry %d\n", loop);

      printf("  Name   : ");

      scanf("%[A-Za-z]", entry[loop].name);

      fflush(stdin); 

 

 

      printf("  Age    : ");

      scanf("%d", &entry[loop].age);

      fflush(stdin); 

 

 

      printf("  Salary : ");

      scanf("%f", &entry[loop].salary);

      fflush(stdin);

   }

 

 

   printf("\nPlease enter your name, age and salary\n");

   scanf(" s %d %lf", name, &age, &salary);

 

 

 

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

   printf("Compiled by %s  age %d  $.2lf\n", name, age, salary);

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

   for (loop=0;loop

      printf("M | %-20s | ] | .2lf\n",

         loop + 1,

  entry[loop].name,

  entry[loop].age,

  entry[loop].salary);

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

   return 0;

}

函数名: stpcpy

 : 拷贝一个字符串到另一个

 : char *stpcpy(char *destin, char *source);

程序例:

 

#include

#include

 

int main(void)

{

   char string[10];

   char *str1 = "abcdefghi";

 

   stpcpy(string, str1);

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

   return 0;

}

 

 

 

 

函数名: strcat

 : 字符串拼接函数

 : char *strcat(char *destin, char *source);

程序例:

 

#include

#include

 

int main(void)

{

   char destination[25];

   char *blank = " ", *c = "C++", *Borland = "Borland";

 

   strcpy(destination, Borland);

   strcat(destination, blank);

   strcat(destination, c);

 

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

   return 0;

}

 

 

 

 

函数名: strchr

 : 在一个串中查找给定字符的第一个匹配之处\

 : char *strchr(char *str, char c);

程序例:

 

#include

#include

 

int main(void)

{

    char string[15];

    char *ptr, c = 'r';

 

    strcpy(string, "This is a string");

    ptr = strchr(string, c);

    if (ptr)

       printf("The character %c is at position: %d\n", c, ptr-string);

    else

       printf("The character was not found\n");

    return 0;

}

 

 

 

 

函数名: strcmp

 : 串比较

 : int strcmp(char *str1, char *str2);

程序例:

 

#include

#include

 

int main(void)

{

    char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

    int ptr;

 

    ptr = strcmp(buf2, buf1);

    if (ptr > 0)

       printf("buffer 2 is greater than buffer 1\n");

    else

       printf("buffer 2 is less than buffer 1\n");

 

    ptr = strcmp(buf2, buf3);

    if (ptr > 0)

       printf("buffer 2 is greater than buffer 3\n");

    else

       printf("buffer 2 is less than buffer 3\n");

 

    return 0;

}

函数名: strcpy

 : 串拷贝用 法: char *strcpy(char *str1, char *str2);

程序例:

 

#include

#include

 

int main(void)

{

    char string[10];

    char *str1 = "abcdefghi";

 

    strcpy(string, str1);

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

    return 0;

}

 

函数名: strrev

 : 串倒转用 法: char *strrev(char *str);

程序例:

 

#include

#include

 

int main(void)

{

   char *forward = "string";

 

   printf("Before strrev(): %s\n", forward);

   strrev(forward);

   printf("After strrev():  %s\n", forward);

   return 0;

}

函数名: strset

 : 将一个串中的所有字符都设为指定字符

 : char *strset(char *str, char c);

程序例:

 

#include

#include

 

int main(void)

{

   char string[10] = "123456789";

   char symbol = 'c';

 

   printf("Before strset(): %s\n", string);

   strset(string, symbol);

   printf("After strset():  %s\n", string);

   return 0;

}

 

函数名: strstr

 : 在串中查找指定字符串的第一次出现

 : char *strstr(char *str1, char *str2);

程序例:

 

#include

#include

 

int main(void)

{

   char *str1 = "Borland International", *str2 = "nation", *ptr;

 

   ptr = strstr(str1, str2);

   printf("The substring is: %s\n", ptr);

   return 0;

}

 

 

 

函数名: strtod

 : 将字符串转换为double型值

 : double strtod(char *str, char **endptr);

程序例:

 

#include

#include

 

int main(void)

{

   char input[80], *endptr;

   double value;

 

   printf("Enter a floating point number:");

   gets(input);

   value = strtod(input, &endptr);

   printf("The string is %s the number is %lf\n", input, value);

   return 0;

}

函数名: strtol

 : 将串转换为长整数

 : long strtol(char *str, char **endptr, int base);

程序例:

 

#include

#include

 

int main(void)

{

   char *string = "87654321", *endptr;

   long lnumber;

 

  

   lnumber = strtol(string, &endptr, 10);

   printf("string = %s  long = %ld\n", string, lnumber);

 

   return 0;

}

 

 

函数名: strupr

 : 将串中的小写字母转换为大写字母

 : char *strupr(char *str);

程序例:

 

#include

#include

 

int main(void)

{

   char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

 

   ptr = strupr(string);

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

   return 0;

}

 

 

函数名: tolower

 : 把字符转换成小写字母

 : int tolower(int c);

程序例:

 

#include

#include

#include

 

int main(void)

{

   int length, i;

   char *string = "THIS IS A STRING";

 

   length = strlen(string);

   for (i=0; i

   {

       string[i] = tolower(string[i]);

   }

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

 

   return 0;

}

 

 

 

函数名: toupper

 : 把字符转换成大写字母

 : int toupper(int c);

程序例:

 

#include

#include

#include

 

int main(void)

{

   int length, i;

   char *string = "this is a string";

 

   length = strlen(string);

   for (i=0; i

   {

      string[i] = toupper(string[i]);

   }

 

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

 

   return 0;

}