在c++中将字符列表更改为int列表



我尝试从字符串更改为char列表,然后将char列表更改为int列表。这是我的代码

int main() {
std::string int1 = "1122334455";
std::list<char> listChars(int1.begin(), int1.end());
std::list<int> intList(listChars.begin(), listChars.end());
for(const auto& elem: intList){
std::cout << elem << " ";
}
}

结果是

49 49 50 50 51 51 52 52 53 53  

1 1 2 2 3 3 4 4 5 5 
我尝试使用的第二种方法是
void printListInt(std::list<int>& listInt){
for(int i:listInt){
std::cout << i;
}
std::cout << std::endl;
}
int main() {
// make string "Hello World" and string "1122334455"
std::string str1 = "Hello World";
std::string int1 = "1122334455";
std::list<char> listChars(str1.begin(), str1.end());
std::list<char> listCharInt(int1.begin(), int1.end());
std::list<int> listInt(listCharInt.begin(), listCharInt.end());
printListInt(listInt);
}

我知道它必须-48来显示预期的结果,但是是否有可能我不使用for来重新计算列表int?

您可以使用例如标准算法std::transform

这是一个示范程序。

#include <iostream>
#include <string>
#include <list>
#include <iterator>
#include <algorithm>
int main() 
{
std::string int1 = "1122334455";
std::list<char> listChars( std::begin( int1 ), std::end( int1 ) );
std::list<int> intList;
std::transform( std::begin( listChars ), std::end( listChars ), 
std::back_inserter( intList ),
[ ]( const auto &c ) { return c - '0'; } );

for(const auto& elem: intList)
{
std::cout << elem << " ";
}
return 0;
}

程序输出为

1 1 2 2 3 3 4 4 5 5

是的,输出是正确的,因为你声明了一个字符串,即std::string int1 = "1122334455";,然后你试图将其打印为integer,然后编译器将自动类型转换根据字符串中所有字符的ASCII值

ASCII值"0"是48

ASCII值"1"是49

ASCII值"2"是50

ASCII值"3"是51

。.ASCII值"9"是57

所以你得到的第一个输出是

49 49 50 50 51 51 52 52 53 53因为它被打印在之后,将从char/string类型转换为int。

如果你想打印1 1 2 2 3 3 4 4 5 5然后有不同的方法来实现,这是其中之一

#include <bits/stdc++.h>
using namespace std;
int main()
{
std::string int1 = "1122334455";
// std::list<char> listChars(int1.begin(), int1.end());
std::list<char> intList;
for (char c: int1) {
intList.push_back(c);
}
for(const auto& elem: intList){
std::cout << elem << " ";
}
return 0;
}

OR,如果打印或存储整个字符串到Integer List然后简单地减去ASCII值0(即48)

#include <bits/stdc++.h>
int main() {
std::string int1 = "1122334455";
std::list<char> listChars(int1.begin(), int1.end());
std::list<int> intList(listChars.begin(), listChars.end());
for(const auto& elem: intList){
std::cout << elem-48 << " ";
}
}

for(const auto& elem: intList)更改为for(const char& elem: intList),它将正常工作。

,因为auto被int替换并且你正在打印字符ASCII价值。

最新更新