遇到的几个c++问题

第一个问题,在对字符数组向int转换时需要注意:转换的时候需要减去‘0’
于是我做了一个测试

#include<iostream>
#include<string>
using namespace std;
int main(){
string str="123";
int n=str[0];
cout<<n;
return 0;
}

此时的输出结果为49,很明显与实际的值不相符
于是坐出如下修改

int n=str[0]-‘0’;

这样就能得到正确的输出结果 1
第二个问题:就是isdigit()函数的使用
首先它是一个C库函数 用来判断所传的字符是否是整数

int isdigit(int c);

判断c是否是个整数 如果是整数那么就返回一个非零值,如果不是整数,那么返回0值
下面给出一个这个函数的实例

#include <stdio.h>
#include <ctype.h>

int main()
{
   int var1 = 'h';
   int var2 = '2';
    
   if( isdigit(var1) )
   {
      printf("var1 = |%c| 是一个数字\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是一个数字\n", var1 );
   }
   if( isdigit(var2) )
   {
      printf("var2 = |%c| 是一个数字\n", var2 );
   }
   else
   {
      printf("var2 = |%c| 不是一个数字\n", var2 );
   }
  
   return(0);
}

第三个问题 ,及时stringstream的使用
stringstream是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的iostream、fstream有类似的操作方式。要使用stringstream,必须先加入头文件

#include <sstream>

库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作。
1、string到int的转换

string result = "10000";  
int n = 0;  
stream << result;  
stream >> n;  //n等于10000 

2.重复利用stringstream对象

如果你打算在多次转换中使用同一个stringstream对象,记住在每次转换前要使用clear()方法。

在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的
3.在类型转换中使用模板

你可以轻松地定义函数模板来将一个任意的类型转换到特定的目标类型。例如,需要将各种数字值,如int、long、double等等转换成字符串,要使用以一个string类型和一个任意值t为参数的to_string()函数。to_string()函数将t转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝。


template<class T>  
  
void to_string(string &result, const T &t)  
{  
  
	ostringstream oss;  //创建一个流  
	oss << t;  //把值传递入流中  
	result = oss.str();  //获取转换后的字符并将其写入result  
}  
 
//这样,你就可以轻松地将多种数值转换成字符串了    
to_string(s1, 10.5);  //double到string  
to_string(s2, 123);  //int到string  
to_string(s3, true);  //bool到string  
  //可以更进一步定义一个通用的转换模板,用于任意类型之间的转换。函数模板convert()含有两个模板参数out_type和in_value,功能是将in_value值转换成out_type类型:  
  
template<class out_type, class in_value>  
  
out_type convert(const in_value & t)  
{  
	stringstream stream;  
  
	stream << t;  //向流中传值  
	out_type result;  //这里存储转换结果  
	stream >> result;  //向result中写入值  
  
	return result;  
}  

 

下面给出一个测试实例

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
 
template<class T>
void to_string(string &result, const T &t)
{
 
	ostringstream oss;
	oss << t;
	result = oss.str();
}
 
template<class out_type, class in_value>
out_type convert(const in_value & t)
{
	stringstream stream;
 
	stream << t;
	out_type result;
	stream >> result;
 
	return result;
}
 
int main()
{
	//to_string实例
	string s1, s2, s3;
 
	to_string(s1, 10.5);  //double到string
	to_string(s2, 123);  //int到string
	to_string(s3, true);  //bool到string
	cout << s1 << endl << s2 << endl << s3 << endl << endl;
 
	//convert()例子
	double d;
	string salary;
	string s = "12.56";
 
	d = convert <double> (s);  //d等于12.56
	salary = convert <string> (9000.0); //salary等于"9000"
 
	cout << d << endl << salary << endl;
 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值