c/c++语言开发共享C和C++字符串问题解析

在c和c++中没有字符串变量,字符串通常都是用一个字符数组来存放的。 这一章的题目能够让我们更好的掌握对数组的运用。 一、不使用库函数将整数转换为字符串 #include using n

在c和c++中没有字符串变量,字符串通常都是用一个字符数组来存放的。

这一章的题目能够让我们更好的掌握对数组的运用。

一、不使用库函数将整数转换为字符串
  #include     using namespace std;    void change(int n, char *str)  {  	int temp;  	int i = 0;  	char buf[10] = "0";  	if(n < 0)  		temp = -n;  //如果输入的数是一个负数就将它转为整数  	else   		temp = n;    	if(str == null)    //判断传入的str是否有效  			return;    	while(temp != 0)  	{  		buf[i++] = temp % 10 + '0';  //将这个整数的每个位拆开,逆序放到buf中  		temp = temp / 10;  	}  	  	int j = 0;  	if(n < 0)     //如果是负数,就将str的第一个元素赋‘-’然后str向后移一个元素的长度  	{  		str[0] = '-';  		j++;  	}    	while(i > 0)  	{  		i--;  		str[j++] = buf[i];//将buf中的值再逆序放到str中。  	}  	str[j] = ''; //在最后一个元素后加上''结尾  }    int main(int argc, char **argv)  {  	int num;   	char p[10];  	cout << "请输入一个整型数据: ";  	cin >> num;  	change(num, p);  	cout << "输出为: " << p << endl;      return 0;  }
二、不使用库函数将字符串转为数字
  #include     using namespace std;    int strint(char const  *str);    int main(int argc, char **argv)  {  	char p[20] = "0";  	cout << "请输入一个字符串:";  	cin.getline(p, 20); //从终端获取一个字符串;  	int n;  	n = strint(p);  	cout << "输出: " << n << endl;      return 0;  }    int strint(char const *str)  {  	int temp = 0;  	const char *ptr = str;    	if((*str == '-') || (*str == '+')) //如果字符串的第一个字符是-或者+那么就将str向后移一位;  	{  		str++;  	}    	while(str)  	{  		if((*str < '0') || (*str > '9')) //如果遇到不是数字的字符就退出循环  			break;  		temp = temp * 10 + (*str - '0'); //将每个字符转为相应的数字  		str++;  	}  	if(*ptr == '-')  	{  		temp = -temp;  	}    	return temp;  }
三、实现strcpy函数
  #include   #include     using namespace std;    void  mystrcpy(char *newstr, const char *oldstr);    int main(int argc, char **argv)  {  	char str[40] = "0";  	char ptr[20];    	cout << "请输入一个字符串: " ;  	cin.getline(str, 40);  	mystrcpy(ptr, str);  	cout << ptr << endl;      return 0;  }    void mystrcpy(char *newstr, const char *oldstr)  {  	if((newstr == null) || (oldstr == null)) //判断这两个字符串的有效性  		return;  	while(*oldstr)  	{  		*newstr++ = *oldstr++;  	}  	*newstr = '';  //将最后一个字符赋值为''结尾  }
四、strcpy和memcpy的区别

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容。

2、复制的方法不同。strcpy不需要指定长度,它遇到''就会结束。memcpy需要根据第三个参数决定复制的长度。

3、用途不同。strcpy一般用于复制字符串,memcpy主要用于复制其他类型数据。

五、计算字符串长度的两种不同实现方法

1、通过一个局部变量计算有多少个字符。

  int mystrlen(const char *str)  {  	int temp = 0;  	while(*str != '')  	{  		temp++;  		str++;  	}  	return temp;  }

这个在遍历的时候有两个变量在执行自增操作。

2、通过一个局部变量来记录遍历前str的位置,然后用遍历之后的地址减去之前的地址就是字符串的长度。

  int mystrlen2(const char *str)  {  	if(str == null)  		return 0;  	const char* ptr = str;    	while(*str)  	{  		str++;  	}    	return (str - ptr);  }

这个在遍历的时候只要一个变量执行自增操作,所以效率会高很多,尤其是在字符串很长的情况下。

六、编程实现字符串中子串的查找
  #include     using namespace std;    const char* strstr(const char *src, const char* sub);    int main(int argc, char **argv)  {  	char p[] = "12346";  	char q[] = "45";  	const char *r = strstr(p,q);  	if(null == r)  			cout << "找不到这个字符串"<< endl;  	cout << r << endl;      return 0;  }    const char* strstr(const char *src, const char* sub)  {  	const char *bp;  	const char *sp;    	if((src == null) || (sub == null)) //判断这两个字符串的有效性  		return src;  	while (*src)  	{  		bp = src; //用于内层循环,这样就不会改变src的地址  		sp = sub; //用于内层循环,这样就保护会改变sub的地址  		while(*bp++ == *sp++)  		{  			if(*sp == '')//如果找到了sub字符串就退出。  				return src;  		}  		src++; //将src自增  	}  	return null;  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607283.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐