在字符串中搜索数字

Searching for numbers in a string

用户以

的形式输入字符串

length=10 width=15

任务是在这样的字符串中找到长度和宽度的值(并将它们分配给变量)。那么,我怎样才能找到这两个数字呢?我应该使用什么functions/methods?你们能给我个主意吗?

正则表达式很有趣,通常不能作为介绍性作业的解决方案 类。

match[1]match[2] 是您感兴趣的字符串的数字部分。如果您需要将它们作为操作,您可能希望将它们传递给 stoi()整数。

代码

#include <iostream>
#include <regex>

int main() {
    std::string s("length=10 width=15");
    std::regex re("length=([0-9]+) width=([0-9]+)");
    std::smatch match;

    if (regex_match(s, match, re)) {
        std::cout << "length: " << match[1] << "\n";
        std::cout << "width:  " << match[2] << "\n";
    }
}

输出

length: 10
width:  15

使用字符串流:

#include <string>
#include <iostream>
#include <sstream>
#include <map>

using namespace std;
int main()
{

    stringstream ss;

    ss.str("length1=10 width=15 length2=43543545");

    map<string, int> resMap;
    string key;
    int val;
    while (ss.peek() != EOF) {
        if (isalpha(ss.peek())) {
            char tmp[256];
            ss.get(tmp,streamsize(256),'=') ;
            key = tmp;
        } else if (isdigit(ss.peek())) {
            ss >> val;
            resMap.insert(pair<string, int>(key,val));
        } else {
            ss.get();
        }
    }

    cout << "result:\n";
    for (map<string, int>::iterator it = resMap.begin(); it != resMap.end(); ++it) {
        cout << "resMap[" << it->first<< "]=" << it->second << endl;
    }

    getchar();
    return 0;
}