C++ 字符串转换c++;
我有一个字符串,第一个元素是例如“a”。我已经声明了一个名为a的变量(例如,int a=1)。我现在的问题是,如何将整个字符串转换为数字(a=1,b=2,c=3,…z=26)?例如:C++ 字符串转换c++;,c++,char,C++,Char,我有一个字符串,第一个元素是例如“a”。我已经声明了一个名为a的变量(例如,int a=1)。我现在的问题是,如何将整个字符串转换为数字(a=1,b=2,c=3,…z=26)?例如: string str=“你好”这必须更改为“85121215”,然后更改为85121215。我给您写了一个简单的例子。它创建了一个包含a-1,b-2,c-3。。。对。然后使用stringstream连接这些值: #include <iostream> #include <map> #incl
string str=“你好”代码>这必须更改为“85121215”
,然后更改为85121215。我给您写了一个简单的例子。它创建了一个包含a-1,b-2,c-3。。。对。然后使用stringstream连接这些值:
#include <iostream>
#include <map>
#include <sstream>
int main()
{
std::string str = "abc";
std::map<char,int> dictionary;
int n = 1;
for(char c='a'; c<='z'; c++)
dictionary.insert(std::pair<char,int>(c,n++));
//EDIT if you want uppercase characters too:
n=1;
for(char c='A'; c<='Z'; c++)
dictionary.insert(std::pair<char,int>(c,n++));
std::stringstream strstream;
for(int i=0; i<str.size(); i++)
strstream<<dictionary[str[i]];
std::string numbers = strstream.str();
std::cout<<numbers;
return 0;
}
#包括
#包括
#包括
int main()
{
std::string str=“abc”;
地图词典;
int n=1;
对于(char c='a';c,您的定义有点小:
"hello" = "85121215
h = 8
e = 5
l = 12
o = 15
我想你是这个意思吧
a = 1
b = 2
...
z = 26
在这种情况下,这并不难:
std::string meh_conv(char c) {
switch(c) { // (or `switch(tolower(c))` and save some typing)
case 'a': case 'A': return "1";
case 'b': case 'B': return "2";
....
case 'z': case 'Z': return "26";
....
// insert other special characters here
}
throw std::range_error("meh");
}
std::string meh_conv(std::string const &src) {
std::string dest;
for (const auto c : s)
dest += meh_conv(c);
return dest;
}
或者使用std::transform()
:
#包括
std::字符串dest;
std::transform(src.begin()、src.end()、back_inserter(dest),
meh_conv)
(不适用于不同的传入和传出类型,至少不适用于原样)
增编
您可能希望参数化替换贴图:
std::map<char, std::string> repl;
repl['a'] = repl['A'] = "0";
repl[' '] = " ";
std::string src = "hello";
std::string dest;
for (const auto c : src) dest += repl[c];
std::map repl;
repl['a']=repl['a']=“0”;
答复['']='';
std::string src=“hello”;
std::字符串dest;
for(const auto c:src)dest+=repl[c];
//转换本身并不关心我们使用什么编码
std::string转换_string(std::string const&in,std::function op)
{
std::ostringstream out;
std::transform(in.begin()、in.end(),
std::ostream_迭代器(out),
op);
return out.str();
}
//每个字符的映射很容易分离
int ascii_az_映射(字符ch)
{
if(ch<'a'| ch>'z'){
std::ostringstream错误;
错误容易接近,
您可以找到96字符的mod of char(a前面的ASCII值),因此它将始终为您提供范围为1-26的值
int value;
string s;
cin>>s;
for(int i=0; i<s.size();i++){
value = s[j]%96;
cout<<value<<endl;
}
int值;
字符串s;
cin>>s;
对于(int i=0;iIt不清楚您正在尝试做什么。请发布一些代码并解释您迄今为止尝试了什么。您希望数字(输出、容器、替换字母)在哪里?例如:string str=“hello”;必须将其更改为“85121215”,然后更改为85121215您将如何处理“敏捷的棕色狐狸跳过了懒惰的狗”?您定义的整数表示形式不适合任何内置类型。@jrok,您需要一个“The”"在那里。无论如何,我可能会使用你的解决方案,然后,假设输入符合程序规范的要求。它的问题与@infact的解决方案相同,它假设字符a
toz
是连续的。@RedX标准只保证字符0-9是连续的。但实际上,是的s、 a-z是连续的。但有一点不同:。我认为一张便条就可以了。没有好办法保持它的便携性。我看到的唯一选择是逐个检查每个字母以获得一个映射/函数。那时我真的不理解这个问题。你能写一个这样做不起作用的例子吗?@bali182,如果使用EBCDIC,任何j及以上的东西都不会起作用使用了ing。也可以切换(tolower(c))
并节省一些键入时间。或者在编译时隔离:#如果'B'-'A'==1&&c'-'A'==2
或者枚举字母是{val='B'-'A'==1&&…}
。我曾经这样做过。绝对-使用预处理程序中的魔法编写默认地图
// transformation itself doesn't care what encoding we use
std::string transform_string(std::string const &in, std::function<int(char)> op)
{
std::ostringstream out;
std::transform(in.begin(), in.end(),
std::ostream_iterator<int>(out),
op);
return out.str();
}
// the per-character mapping is easy to isolate
int ascii_az_map(char ch)
{
if (ch < 'a' || ch > 'z') {
std::ostringstream error;
error << "character '" << ch << "'=" << (int)ch
<< " not in range a-z";
throw std::out_of_range(error.str());
}
return 1 + ch - 'a';
}
// so we can support other encodings if necessary
// NB. ebdic_to_ascii isn't actually implemented here
int ebcdic_az_map(char ch)
{
return ascii_az_map(ebcdic_to_ascii(ch));
}
// and even detect the platform encoding automatically (w/ thanks to Phresnel)
// (you can still explicitly select a non-native encoding if you want)
int default_az_map(char ch)
{
#if ('b'-'a' == 1) && ('j' - 'i' == 1)
return ascii_az_map(ch);
#elif ('j'-'i' == 8)
return ebcdic_az_map(ch);
#else
#error "unknown character encoding"
#endif
}
// use as:
std::string str = "hello";
std::string trans = transform_string(str, ascii_az_map);
// OR ... transform_string(str, ebcdic_az_map);
int value;
string s;
cin>>s;
for(int i=0; i<s.size();i++){
value = s[j]%96;
cout<<value<<endl;
}