如何从字符串/文件中分离字符和整数?

时间:2015-04-09 03:26:00

标签: c++

假设我们以下列形式获得输入文件:

12 a -5 
T 23 -1 34 R K s 3 4 r  
a a 34 12 -12 y 

现在,我们需要阅读整个文件并打印以下内容:

number of integers
number of lowercase char
number of uppercase char
sum of all integers

这样的问题一直是我肉体的刺,我想一劳永逸地解决这个问题。

3 个答案:

答案 0 :(得分:1)

您需要parse文件:

1)将原始文本分成tokens,然后

2)“决定”令牌是字符串,整数还是“别的东西”。

3)计算结果(#/整数,#/字符串等)

以下是一个示例:Parse A Text File In C++

以下是关于该主题的规范教科书:The Dragon Book

答案 1 :(得分:1)

基本上,您要解析命令行,打开文件,按令牌解析每个行令牌,并检查每个令牌的要求。我希望这会有所帮助。

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <stdlib.h>

using namespace std;

int main(int argc, char* argv[]) {
        ifstream in(argv[1]);
        string line, ch;
        int int_count = 0, upper_count = 0, lower_count = 0, sum = 0;
        /* Grab each line from file and place contents into line */
        while(getline(in, line)) {
                istringstream ss(line);
                /* Parse each token in line */
                while(ss >> ch) {
                        /* Is it a digit? */
                        if(isdigit(ch[0])) {
                                int_count++;
                                sum += atoi(ch.c_str());
                        }
                        /* If it's not, then it must be a char */
                        else {
                                if(isupper(ch[0]))
                                        upper_count++;
                                else
                                        lower_count++;
                        }
                }
        }
        in.close();

        cout << "Number of integers: " << int_count << endl;
        cout << "Number of lowercase char: " << lower_count << endl;
        cout << "Number of uppercase char: " << upper_count << endl;
        cout << "Sum of all integers: " << sum << endl;

        return 0;
}

答案 2 :(得分:0)

  1. 按空格分割

  2. 检查它是否仅包含0-9,&#39; - &#39;和&#39;。如果有的话,它可能是一个数字。如果它没有;可能是一些文字。

  3. 随着时间的推移计算。