2015-04-09 3 views
0

Предположим, что задан входной файл в следующем виде:Как отделить символы и целые числа от строки/файла?

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 

Вопросы, как это всегда было шипом в моей плоти, и я хочу, чтобы все это закончилось.

+0

Православие должно быть вопросом – MickyD

+0

Вам нужно сделать что-то, называемое «Tokenization». Google для получения дополнительной информации. – CinCout

ответ

1

Вы должны parse файл:

1) отдельный необработанный текст в tokens, затем

2) "решают", если маркер является строка, целое число, или "что-то другое".

3) Подсчитайте результаты (#/целые числа, #/строки и т.д.)

Вот пример: Parse A Text File In C++

Вот канонический учебник по теме: The Dragon Book

0
  1. Split пробел

  2. Проверьте, что он содержит только 0-9, '-' и '.', если это так, это, вероятно, число. Если это не так; вероятно, какой-то текст.

  3. Подсчитайте, как вы идете.
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; 
} 
Смежные вопросы