c/c++面试45-50之字符串
45 使用库函数将数字转换为字符串,下面是常用库函数
(1) itoa():将整型转换为字符串
(2)ltoa():将长整形转换为字符串
(3)gcvt():将浮点转换为字符串
46 不使用库函数将整数转换为字符串
-------->通过把整数的各位上的数字加上'\0'转换为char类型并存到字符数组
(1)代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
47 不适用库函数将字符串转换为数字
(1)代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
48 编程实现strcpy函数
(1)代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
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 }
好了 先到这。。。。。还有好几个任务,加油