设为首页 加入收藏

TOP

C和C++字符串问题解析(一)
2018-05-08 06:06:47 】 浏览:338
Tags:字符串 问题 解析

在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] = '\0'; //在最后一个元素后加上'\0'结尾
}

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 = '\0'; //将最后一个字符赋值为'\0'结尾 }
   
  
四、strcpy和memcpy的区别

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

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

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

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

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

int mystrlen(const char *str)
{
	int temp = 0;
	while(*str != '\0')
	{
		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; //用于内层循环,这样就保护会改
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++相关数据结构成员方法的调用 下一篇c++的对象模型,单继承和多继承的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目