C++ 如何扫描包含单词和数字的字符串,但将其放在不同的数组中
例如,我有一个字符串abc123(总是先输入单词然后输入数字,单词和数字之间没有空格) 我知道在c语言中,你可以像这样单独扫描它C++ 如何扫描包含单词和数字的字符串,但将其放在不同的数组中,c++,C++,例如,我有一个字符串abc123(总是先输入单词然后输入数字,单词和数字之间没有空格) 我知道在c语言中,你可以像这样单独扫描它 char words[10], numbers[10]; scanf("%[a-zA-Z]%[0-9]", words, numbers) 代码将把abc变成单词,123变成数字 可以在C++中这样做吗?怎么做呢?下面的代码读取一行直到第一行新行(您可能希望将其更改为空格),并将每个字符转换为数字。如果转换失败,那就是一封信 #include &
char words[10], numbers[10];
scanf("%[a-zA-Z]%[0-9]", words, numbers)
代码将把abc变成单词,123变成数字
可以在C++中这样做吗?怎么做呢?下面的代码读取一行直到第一行新行(您可能希望将其更改为空格),并将每个字符转换为数字。如果转换失败,那就是一封信
#include <string>
#include <vector>
#include <iostream>
int main(){
std::string line;
std::vector<char> words;
std::vector<int> numbers;
while(std::getline(std::cin, line, '\n')){
for(const char c : line){
try{
numbers.push_back(std::stoi(std::string(1, c)));
}
catch( const std::invalid_argument &ex){
std::cout << ex.what() << ": " << c << std::endl;
words.push_back(c);
}
}
}
for(const auto t : numbers){
std::cout << t;
}
for(const auto t : words){
std::cout << t;
}
return 0;
}
#包括
#包括
#包括
int main(){
std::字符串行;
向量词;
std::向量数;
while(std::getline(std::cin,line,'\n')){
for(常量字符c:行){
试一试{
push_back(std::stoi(std::string(1,c));
}
catch(const std::无效的参数&ex){
std::cout下面的代码读取一行直到第一个新行(您可能希望将其更改为空格),并将每个字符转换为数字。如果转换失败,则为字母
#include <string>
#include <vector>
#include <iostream>
int main(){
std::string line;
std::vector<char> words;
std::vector<int> numbers;
while(std::getline(std::cin, line, '\n')){
for(const char c : line){
try{
numbers.push_back(std::stoi(std::string(1, c)));
}
catch( const std::invalid_argument &ex){
std::cout << ex.what() << ": " << c << std::endl;
words.push_back(c);
}
}
}
for(const auto t : numbers){
std::cout << t;
}
for(const auto t : words){
std::cout << t;
}
return 0;
}
#包括
#包括
#包括
int main(){
std::字符串行;
向量词;
std::向量数;
while(std::getline(std::cin,line,'\n')){
for(常量字符c:行){
试一试{
push_back(std::stoi(std::string(1,c));
}
catch(const std::无效的参数&ex){
STD:当然可以,C++中有这样的功能。C++有一个你可能感兴趣的库。C大部分是C++的子集,所以我的第一个问题是你测试过吗?<代码> SCANF(“% 9 [^ 0 9] %9S”,单词,数字)< /C> >(注意<代码> > <代码>在第一个代码> %''/c> >代码> %[]…
转换说明符不使用前导空格)。两者都需要使用9
作为字段宽度修饰符,以防止缓冲区溢出字符[10],数字[10];
@AlexBaum Re:“C在很大程度上是C++的子集。”首先,C++编译器是C++的前端翻译者,然后编译C代码,在那时,C++的子集可以。C++,你可以在C++中做这件事。值得注意的是C++有一个你可能感兴趣的库。C大部分是C++的子集,所以我的第一个问题是你测试过这个吗?<代码> SCANF(%)9。[^0-9]%9s”,单词,数字)
(注意第一个'%
之前的'
,%[…]
转换说明符不使用前导空格)。这两个字符都需要9
作为字段宽度修饰符,以防止字符[10],数字[10]的缓冲区溢出;
@AlexBaum Re:“C是,大部分是C++的子集”:第一C++编译器是C++的前端翻译者,然后编译C代码,在那时,C++是C的子集。