输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。

  1. 方法一:使用C函数库中的函数atoi(const char *nptr),一行代码就可以解决问题,但这并不是题目所需要的解题思路;
  2. 方法二:假如我们输入的是“345”,从左到右依次遍历,第一次所要的结果是“3”,第二次所要的结果是“34”,34=3*10+4,第三次所要的结果是“345”,345=34*10+5。由此,我们可以从左到右依次遍历每一个字符,将前一次得到的结果*10+本次遍历的字符,使用一个循环就可以将一个字符串转化成一个整数。

  

  1. 如果字符串中的第一个字符是“-”,那么得到的是负整数。因此,需要先判断第一个字符是不是“-”,如果是,则将最后的结果乘以-1即可;
  2. 如果有非法输入,即字符串中有不在”0”~”9”之间的字符。如果碰到非法输入的字符,则直接退出转化的操作,同时返回一个布尔型的值0(输入的字符串也可能是0,为了区分,也可以单独打印一条提示语句)。
  3. 如果输入的字符串很长,则可能溢出。如果是正数溢出,则大于最大的整数,如果是负数溢出,则小于最小的整数。使用

if((result > numeric_limits<int>::max() && !isNegative) || (result < numeric_limits<int>::min() && isNegative))

来判断。溢出后也直接退出转化的操作。

#include <iostream>

#include <string>

#include <limits>

using namespace std;

bool validInput = false;//表示是非法输入

int strToInt(const char *str){

//bool invalid

bool isNegative = false;//用于判断是否是负数的标志

long result = 0;//用于保存最后的结果

const char *digit = str;

if(digit != NULL){

if(*digit == ‘+‘){//判断是否是正数

//isNegative = false;//不需要重新赋值

digit++;

}

else if(*digit == ‘-‘){//判断是否是负数

isNegative = true;

digit++;

}

while(*digit !=‘\0‘){

if(*digit >=‘0‘ && *digit <=‘9‘){

result = result*10 + (*digit -‘0‘);//得到一个数字

if((result > numeric_limits<int>::max() && !isNegative) || (result < numeric_limits<int>::min() && isNegative)){

result = 0;//溢出后的处理

break;

}

digit++;

}

else{//遇到非法字符,停止计算,直接退出

result = 0;

break;

}

}

if(*digit == ‘\0‘){//如果到达最后一个字符时,则是有效输入。

validInput = true;

if(isNegative){

result =(-1)*result;//or  result =0-result

}

}

}

return result;

}

int main(void){

cout<<"Enter a string:"<<endl;

char *mystring = new char[100];

cin>>mystring;

cout<<"After Convert,the result is :"<<endl;

cout<<strToInt(mystring)<<endl;

cout<<"The status of the string is "<<validInput<<endl;

delete[] mystring;//释放内存空间

system("pause");

return 0;

}

时间: 2024-10-24 19:43:40

输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。的相关文章

面试题5:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 注意从后向前替换,使得时间复杂度为O(n); public class Main { public static void main(String[] args) { Main main01=new Main(); String str=main01.replaceSpace(new StringBuffer("old s

字符串转换:字符串中的&#39;aa&#39;转换成&#39;bb&#39;,但是如果是&#39;a&#39;、&#39;aaa&#39;等,则不进行转换

代码: public void transferString(String str) { //0.条件初始化 char[] cArr = str.toCharArray(); //将字符串转为字符数组处理 char[] flagArr = new char[cArr.length]; //字符数组标记,判断是否转换 for(int i = 0; i < flagArr.length; i++) { //字符数组初始为0 flagArr[i] = '0'; } //1.循环遍历数组,每次处理一个或

微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

转载注明出处 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时器的小时和分钟.唯一的缺点就是不能选择秒. 一开始的想法是选择的到一个字符串以后,截取字符串转换成数字然后和以前一样不停的计算.什么计算秒数,换算成分数啊之类的 想想虽然不难但还是太麻烦了.就想有没有简单易懂的实现方法. 首先想到的就是js中的Date() 因为这个函数可以传字符串获取毫秒数,传毫秒数获取字符串.那么总体上来看,应该是可行的. 思路: 首先我们的

2004-输入一个百分制的成绩t,将其转换成对应的等级

,具体转换规则如下: 90~100为A; 80~89为B; 70~79为C; 60~69为D; 0~59为E; 如果输入数据不在0~100范围内,请输出一行:“Score is error!”. 这题的关键在于最后一句如果输入数据不在范围内如何处理? 如果简单的定义一个整型变量,再复制,如果输入一个字母或者一串字符就会出错. #include<iostream> using namespace std; int main() { int a; while (cin>>a&&

Gson解析json字符串、json数组转换成对象

实体类: public class Product { private int id; private String name; private String date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name

js把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式

最近在做项目的时候,需要把后台返回的时间转换成几秒前.几分钟前.几小时前.几天前等的格式:后台返回的时间格式为:2015-07-30 09:36:10,需要根据当前的时间与返回的时间进行对比,最后显示成几秒前.几分钟前.几小时前.几天前的形式. 1.由于返回的时间是字符串格式,所以要先转换成时间戳 //字符串转换为时间戳 function getDateTimeStamp (dateStr) { return Date.parse(dateStr.replace(/-/gi,"/"))

js字符串或则布尔值转换成数字类型的四种方法

1.parseInt() 2.parseFloat() 3.Number() 4.通过减法或者乘法把其他类型的值转换为数字类型 例子: // 转换成数字类型的4种方法 // 1.parseInt var a = '1.03'; var b = '1.01a'; var c = 'a1'; var d = true; var e = false; console.log(parseInt(a)); // 1 小数字符串,使用parseInt会把小数取整 console.log(parseInt(b

Java中从键盘中任意输入字符串,将其转换成数字后,并求和

将价钱(float)转换成带分隔符的价钱(字符串)

2988.32 --> 2,988.32 2988.00 --> 2,988 + (NSString *)priceStrWithPrice:(float)price {     NSString *priceStr = [NSString stringWithFormat:@"%.2f", price];     NSString *intStr = [[priceStr componentsSeparatedByString:@"."] firstO

JS 将字符串转换成日期类型

将字符串形式的日期转换成日期对象 var strTime="2011-04-16"; //字符串日期格式           var date= new Date(Date.parse(strTime.replace(/-/g,   "/"))); //转换成Data(); var month=date.getMonth()+1; //获取当前月份 -----------------------------------------------------------