Форум программистов, компьютерный форум CyberForum.ru

Определить все данные, тип которых вводится из командной строки - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
01.03.2012, 10:21     Определить все данные, тип которых вводится из командной строки #1
Файл содержит символы, слова, целые числа и числа с плавающей запятой.
Определить все данные, тип которых вводится из командной строки.

для определения типы делаю так:
C++
1
2
3
4
if (strcmp(argv[1],"int"))
               int a;
        if (strcmp(argv[1],"char"))
               char a;
Но оно не сравнивает и не определяет....
мыслей, как организовать в самой строке слова с числами находить нет вовсе...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2012, 10:21     Определить все данные, тип которых вводится из командной строки
Посмотрите здесь:

В параметрах командной строки передается список слов. Определить и вывести на экран слово максимальной длины. C++
Удалить из матрицы A все строки, сумма элементов которых четна, а из матрицы B – строки, сумма элементов которых нечетна(функции) C++
Найти строки,а затем слова номера которых введены в командной строке C++
C++ В прямоугольной матрице выявить все строки, у которых максимальный элемент превосходит сумму остальных элементов строки
C++ Определить константы по аргументам командной строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
02.03.2012, 17:40     Определить все данные, тип которых вводится из командной строки #21
Liv-pooL, как и обещал довёл логику strtok - вышло здорово(см скрины)
Данные в файле прежние : baba v 45 45.4 45.67 dgskjkh 4 8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
int isString(char * text)
{
    int ret = 1;
    for(int i = 0; text[i] != '\0' && ret; i++)
    {
        if(isdigit(text[i]))
            ret = 0;
    }
    return ret;
} 
 
int main(int argc, char * argv[])
{
    int    i_arg;
    double d_arg;
    int iType= 0;
    int iComa= 0;
    long sLen= 0;
    long count = 0;
    char * str = NULL;
    char * tok = NULL;
    FILE * f = NULL;
    if(argc < 2)
        printf("To less of arguments\n");
    else
    if(!(f = fopen("data.txt","r")))
        printf("Error creating data.txt\n");
    else
    {
        fseek(f,0,SEEK_END);
        sLen = ftell(f);
        fseek(f,0,SEEK_SET);
        if(strcmp(argv[1],"int") == 0)
            iType = 1;
        if(strcmp(argv[1],"double") == 0)
            iType = 2;
        if(!(str = (char * )malloc((1 + sLen)*sizeof(char))))
            printf("Allocation memory error\n");
        else
        if(!fread(str,1,sLen,f))
            printf("File reading error\n");
        else
            str[sLen] = '\0';
        fclose(f);
        tok = strtok(str," ");
        while(tok)
        {
            iComa = (strchr(tok,'.') || strchr(tok,','));
            switch(iType)
            {
            case 1:
                if(sscanf(tok,"%d",&i_arg) && !iComa)
                {
                    printf("int : %d\n",i_arg);
                    count = count + 1;
                }
                break;
            case 2:
                if(sscanf(tok,"%lf",&d_arg)&& iComa)
                {
                    printf("double : %lf\n",d_arg);
                    count = count + 1;
                }
                break;
            default:
                if(isString(tok))
                {
                    printf("string : %s\n",tok);
                    count = count + 1;
                }
                break;
            };
            tok = strtok(NULL," ");
        }
        printf("Total count of params %d\n",count);
    }
    system("pause");
    return 0;
}
Миниатюры
Определить все данные, тип которых вводится из командной строки   Определить все данные, тип которых вводится из командной строки   Определить все данные, тип которых вводится из командной строки  

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
02.03.2012, 17:47
  #22

Не по теме:

kravam, тебе бы не коды писать а сказки!
Во первых последний твой код из поста 20 абсолютно нерабочий!
(тест с параметром int double и т.д. постоянно приводит к результату "Что-то ты не то ввёл"). Возможно перед запуском твоей программы ещё молиться надо или читать мантры и тогда она работает, ну что ж такой тест не делал
Во вторых от всей души вручаю тебе приз за самый раздутый код.
Ну а в 3-х на

Цитата Сообщение от kravam Посмотреть сообщение
using namespace std;
компилятор не ругался, не?

kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
02.03.2012, 19:34     Определить все данные, тип которых вводится из командной строки #23
Исправил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
 
#define kolichestvo_el 12
 
 
using namespace std;
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
int f (char* p, char* tip) {
 
 //проверка- int не int;
 if (!(strcmp(tip, "int"))) {  
  if (atoi(p)&&!strchr(p, '.')) 
   printf ("%s целое число\n", p);
  else if ((strlen(p)==1)&& p[0]=='0') 
    printf ("%s целое число\n", p);
  return 0;
 }
 
 //проверка- double не double;
 if (!(strcmp(tip, "float"))|| !(strcmp(tip, "double"))) { 
  if (!(atoi(p)&&!strchr(p, '.')))  
   if (!((strlen(p)==1)&& p[0]=='0'))   
    if (atof(p)) 
     printf ("%s дробное число\n", p);
     return 0;
 }
 
 //проверка- char не char;
 if (!(strcmp(tip, "char"))) { 
  if (!(atoi(p)&&!strchr(p, '.')))
   if (!((strlen(p)==1)&& p[0]=='0'))
    if (!atof(p))
     if (strlen(p)== 1) 
      printf ("%s символ\n", p);
      return 0;
 }
 
 //проверка- char* не char*;
 if (!(strcmp(tip, "char*"))) { 
  if (!(atoi(p)&&!strchr(p, '.')))
   if (!((strlen(p)==1)&& p[0]=='0'))
    if (!atof(p))
     if (!(strlen(p)== 1)) 
      printf ("%s строка\n", p);
      return 0;
 }
 
 return 1;
}
 
 
 
 
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
int main(int argc, char* argv[]) {
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 char* proba [kolichestvo_el]= {(char*)"stroka", (char*)"c", (char*)"-234", (char*)"-456.77",\
                                (char*)"-121", (char*)"-3.45.7", (char*)"3.45.7", (char*)"0",\
                                (char*)"0.0", (char*)"-0", (char*)"-0.04", (char*)"qwe.erer"};
 
 
 //Вот ты запустил программу из консоли, допустим так:
 //main.exe int
 //И вот щас, в момент выполнения твоей программе доступны 
 //argv [0] и argv [1], причём argv [0] суть "main.exe",
 //argv [1] суть int
 //Воспользуемся этим 
 
 for (int i= 0; i< kolichestvo_el; i++) {
  if (f (proba[i], argv[1])) {
   printf ("Что-то ты не то ввёл\n");
   break;
  }
 }    
 
 return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2012, 23:04     Определить все данные, тип которых вводится из командной строки
Еще ссылки по теме:

C++ Определить, есть ли в матрице строки, все элементы которых равны нулю, за исключением последнего
C++ Путь к файлу вводится в командной строке как аргумент функции main()

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
12.03.2012, 23:04  [ТС]     Определить все данные, тип которых вводится из командной строки #24
Можете помочь с вопросом: Как при помощи ф-ий read/write записать в файл, а потом считать с него
Yandex
Объявления
12.03.2012, 23:04     Определить все данные, тип которых вводится из командной строки
Ответ Создать тему
Опции темы

Текущее время: 12:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru