欢迎来到贱贱的博客

扩大
缩小

c/c++面试45-50之字符串

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

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

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

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

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

-------->通过把整数的各位上的数字加上'\0'转换为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) + '\0';
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++) != '\0')
11     {
12         return strDestCopy;
13     }
14 }
15 
16 int getStrlen(const char* strSrc)
17 {
18     int len = 0;
19     while (*strSrc++ != '\0')
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\n", strDest);
34     printf("lenth of strDest:%d\n", len);
35     getchar();
36     return 0;
37 }
View Code

49 strcpy与memcpy的区别

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

(2)复制的方法不同。strcpy不需要指定长度,遇到结束符\0结束。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表示的字符数组没有以\0结尾,strcpy的时候不知道结束字符
10 }

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

posted on 2017-12-13 14:43  L的存在  阅读(427)  评论(0编辑  收藏  举报

导航