vs2013 如何将string字符串转换成数字形式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2013 如何将string字符串转换成数字形式相关的知识,希望对你有一定的参考价值。

atoi不能用,会发生lpwstr 与const char类型不兼容错误

atoi
wtoi
_ttoi
(后两个可能在<TCHAR.h>里,如果提示出错就include一下)
这三个函数(其实第三个是宏)分别对应lpstr(char*) lpwstr(wchar_t*) 和TCHAR*三种,选择匹配的就行(就你这个情况目测_ttoi最好)

顺带一提,几乎所有涉及字符串的函数都是这样三个一组的,使用时注意匹配就好
参考技术A

#include <sstream>  //转换所需的头文件
#include <string>
#include <iostream>
using namespace std;
string numToStr(double i);   //声明
int strToNum(string s); //声明
///////////数字转字符串函数_定义///////////
string numToStr(double i)

stringstream ss;
ss << i;
cout << i;
return ss.str();

//////////字符串转换为数字_定义//////////
int strToNum(string s)

int num;
stringstream ss(s);
ss >> num;
cout << num;
return num;

int main()

int number;
string str;
cout << "字符串转数字:" << endl;
cin >> str;
strToNum(str);
cout << "数字转字符串:" << endl;
cin >> number;
numToStr(number);
system("pause");
return 0;

参考技术B

atoi函数要求参数是个const char*,就是常量字符串,string的c_str()方法返回的就是const char*

#include<iostream>
#include<string>
using namespace std;
int main()
 
 string s="12345";
 int n=atoi(s.c_str());
 cout<< n<<endl;
 return 0;

参考技术C 上面的回答正解,再教你一种,你添加一个头文件 #include<sstream> ,然后定义变量stringstream型,例:stringstream temp;string s="123456";int i;temp<<s;temp>>i;cout<<i<<endl; 参考技术D #include <iostream>
using namespace std;
void main(void)
string str("12345");
cout << atoi(str.c_str()) << endl;

Z字形变换

将字符串 "PAYPALISHIRING" 以 Z 字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:

P     I    N
A   L S  I G
Y A   H R
P     I

leetcode上的一道题,一开始看到这个题目,很耿直的就直接做了: 很好的对应刘每一个空格。。
def convert(s,num):
    chushu=num*2-2
    base=1+num-2
    if chushu==0:
        return s
    yushu=len(s)%chushu
    if yushu==0:
        lieshu = len(s) / chushu * base
    elif yushu<=num:
        lieshu=len(s)/chushu*base+1
    elif yushu> num:
        lieshu = len(s) / chushu * base + yushu-num+1
    newdata=[[‘‘ for j in range(num)] for i in range(lieshu)]
    k=0
    for i in range(lieshu):
        for j in range(num):
            if k<len(s):
                if i%(num-1)==0 or (i+j)%(num-1)==0:
                    newdata[i][j]=s[k]
                    k+=1
    # print newdata
    a=[]
    for j in range(num):
        a.extend([i[j] for i in newdata if i[j]!=‘‘])
    return ‘‘.join(a)
if __name__ == __main__:
    s=PAYPALISHIRING
    res= convert(s,4)
    print res

结果是:

[[P, A, Y, P], [‘‘, ‘‘, A, ‘‘], [‘‘, L, ‘‘, ‘‘], [I, S, H, I], [‘‘, ‘‘, R, ‘‘], [‘‘, I, ‘‘, ‘‘], [N, G, ‘‘, ‘‘]]
PINALSIGYAHRPI

当然对是没问题的,就是效率比较低。

这道题有个技巧就是不需要管空格,因为他是按行打印的,P I N,无论你中间隔多少,都是这几个字母,然后再搞清楚他的排列方式,一会向下一会向上的。

技术分享图片

def convert3(s,num):
    chushu = num * 2 - 2
    base = 1 + num - 2
    if chushu == 0:
        return s
    newdata=[[] for i in range(num)]
    c=0
    direc=1  #方向
    for i in s:
        newdata[c].append(i)
        if c>=num-1:
            direc=-1
        elif direc==-1 and c==0:
            direc=1
        c+=direc
    print newdata
    return ‘‘.join([‘‘.join(i) for i in newdata])
if __name__ == __main__:
    s=PAYPALISHIRING
    res= convert3(s,4)
    print res

结果是:

[[P, I, N], [A, L, S, I, G], [Y, A, H, R], [P, I]]
PINALSIGYAHRPI

 


以上是关于vs2013 如何将string字符串转换成数字形式的主要内容,如果未能解决你的问题,请参考以下文章

JS字符串转成数学表达式

在SQL语句里面如何将字符型转换成数字型?

在SQL语句里面如何将字符型转换成数字型?

在SQL语句里面如何将字符型转换成数字型?

vs2013 提示无法从void转换为char

N字形变化 flag标签转换方向