zoukankan      html  css  js  c++  java
  • c/c++面试45-50之字符串

    45 使用库函数将数字转换为字符串,下面是常用库函数

    (1) itoa():将整型转换为字符串

    (2)ltoa():将长整形转换为字符串

    (3)gcvt():将浮点转换为字符串

    46 不使用库函数将整数转换为字符串

    -------->通过把整数的各位上的数字加上''转换为char类型并存到字符数组

    (1)代码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void int2str(int n, char *str)
     5 {
     6     char buf[10] = "";
     7     int i = 0;
     8     int len = 0;
     9     int temp = n < 0 ? -n : n;//绝对值
    10 
    11     if (str == NULL)
    12     {
    13         return;
    14     }
    15     while (temp)
    16     {
    17         buf[i++] = (temp % 10) + '';
    18         temp = temp / 10;
    19     }
    20     len = n < 0 ? ++i : i;//如果n是负数 需要多一位来存放负数
    21     str[i] = 0;
    22     while (1)
    23     {
    24         i--;
    25         if (buf[len - i - 1] == 0)
    26         {
    27             break;
    28         }
    29         str[i] = buf[len - i - 1];//buf数组里的字符拷到字符串
    30         if (i == 0)
    31         {
    32             str[i] = '-';
    33         }
    34     }
    35 
    36 }
    37 
    38 int main2()
    39 {
    40     int nNum;
    41     char p[10];
    42 
    43     cout << "please input an integer";
    44     cin >> nNum;
    45     cout << "output";
    46     int2str(nNum, p);
    47     cout << p << endl;
    48 
    49 
    50     return 1;
    51 }
    View Code

    47 不适用库函数将字符串转换为数字

    (1)代码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int str2int(const char* str)
     5 {
     6     int temp = 0;
     7     const char *ptr = str;
     8 
     9     if (*str == '-' || *str == '+')
    10     {
    11         str++;
    12     }
    13     while (*str != 0)
    14     {
    15         if ((*str<'0') || (*str>'9'))
    16         {
    17             break;
    18         }
    19         temp = temp * 10 + (*str - '0');//如果当前字符是数字 计算这个值
    20         str++;//移动下一个字符
    21     }
    22     if (*ptr == '-')
    23     {
    24         temp = -temp;
    25     }
    26     return temp;
    27 }
    28 
    29 int main3()
    30 {
    31     int n = 0;
    32     char p[10] = "";
    33     cin.getline(p, 20);//中断获取字符串
    34     n = str2int(p);//字符串转换整数
    35     cout << n << endl;
    36     getchar();
    37     return 0;
    38 }
    View Code

    48 编程实现strcpy函数

    (1)代码

     1 #include <stdio.h>
     2 
     3 char *strcpy(char* strDest, const char* strSrc)
     4 {
     5     if ((strDest == NULL) || (strSrc == NULL))
     6     {
     7         return NULL;
     8     }
     9     char* strDestCopy = strDest;//保存目标字符串首地址
    10     while ((*strDest++ = *strSrc++) != '')
    11     {
    12         return strDestCopy;
    13     }
    14 }
    15 
    16 int getStrlen(const char* strSrc)
    17 {
    18     int len = 0;
    19     while (*strSrc++ != '')
    20     {
    21         len++;
    22     }
    23     return len;
    24 }
    25 
    26 int main()
    27 {
    28     char strSrc[] = "hello world";
    29     char strDest[20];
    30     int len = 0;
    31 
    32     len = getStrlen(strcpy(strDest, strSrc));
    33     printf("strDest:%s
    ", strDest);
    34     printf("lenth of strDest:%d
    ", len);
    35     getchar();
    36     return 0;
    37 }
    View Code

    49 strcpy与memcpy的区别

    (1)复制的内容不同。strcpy只能复制字符串,但是memcpy可以复制任何内容(数组  结构体。。)

    (2)复制的方法不同。strcpy不需要指定长度,遇到结束符结束。memcpy根据第三个参数决定复制的长度

    (3)用途不同  复制除了字符串以外的一般就用memcpy

    50 改错之数组越界

    (1)

    1 void test()
    2 {
    3       char string[10];
    4       char* str1="0123456789";
    5       strcpy(string,str1); //因为会把str1的结束符复制过去导致越界       
    6 }

    (2)

     1 void test2()
     2 {
     3       char string[10],str1[10];
     4       int i;
     5       for(i=0;i<10;i++)
     6       {
     7             str1[i] = 'a';
     8       }
     9      strcpy(string,str1);//str1表示的字符数组没有以结尾,strcpy的时候不知道结束字符
    10 }

    好了 先到这。。。。。还有好几个任务,加油

  • 相关阅读:
    diffstat命令
    v-if与v-show的区别
    常数时间插入、删除和获取随机元素
    diff命令
    C++ bitset的简单使用
    树的直径 | 简答的两道模板题
    Codeforces Round #544 (Div. 3)简单题解
    VIM 入门手册, (VS Code)
    PTA 天梯赛 L3-003 社交集群(并查集)
    L3-002 特殊堆栈 (双数组模拟栈)
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/8032787.html
Copyright © 2011-2022 走看看