C++ 如何扫描包含单词和数字的字符串,但将其放在不同的数组中

C++ 如何扫描包含单词和数字的字符串,但将其放在不同的数组中,c++,C++,例如,我有一个字符串abc123(总是先输入单词然后输入数字,单词和数字之间没有空格) 我知道在c语言中,你可以像这样单独扫描它 char words[10], numbers[10]; scanf("%[a-zA-Z]%[0-9]", words, numbers) 代码将把abc变成单词,123变成数字 可以在C++中这样做吗?怎么做呢?下面的代码读取一行直到第一行新行(您可能希望将其更改为空格),并将每个字符转换为数字。如果转换失败,那就是一封信 #include &

例如,我有一个字符串abc123(总是先输入单词然后输入数字,单词和数字之间没有空格)

我知道在c语言中,你可以像这样单独扫描它

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的子集。