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

Подскажите как прочитать целочисленное значение из string. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
16.09.2011, 23:52     Подскажите как прочитать целочисленное значение из string. #1
Помогите!
Есть файл содержащий значения для некоторых целочисленных переменных в виде "имя = значение":
vn1 = 11
vn2 = 131
vn3 = 74
*Числа могут быть либо трёхзначные, либо двухзначные.
Вопрос - как проще и логичнее считать эти числа в свои переменные?(можно переформатировать файл)
Я сделал так:
1) Прочитал файл в одномерный символьный массив
2) Используя strstr() находил нужное имя переменной
3) Переведя указатель за знак "=" читал всё до конца строки в char buff[4]
4) Далее при помощи atoi() преобразовывал char buff[4] к int.

Но я не хочу это использовать т.к. а) наверняка можно проще, б) правильно читаются только трёхзначные числа, а к двухзначным например 74, во время преобразования добавляется 0, то есть atoi() возвращает 740.

Наставьте на путь! Пожалуйста=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2011, 23:52     Подскажите как прочитать целочисленное значение из string.
Посмотрите здесь:

есть массив char. есть строка string. как присвоить значению string-a значение char-a? C++
C++ Как написать функцию, которая бы получала на входе целочисленное число, а возвращала бы значение суммы цифр куба этого числа?
C++ С помощью string прочитать строку
C++ Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина?
C++ Выводит целочисленное значение вместо вещественного (функции)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.09.2011, 00:20     Подскажите как прочитать целочисленное значение из string. #2
C
1
2
3
char buf[20] = { 0 }; //19 символов под имя переменной
int d;
fscanf("%s = %d", buf, &d);
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 01:26  [ТС]     Подскажите как прочитать целочисленное значение из string. #3
А есть варианты по обработке символьного массива?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.09.2011, 01:30     Подскажите как прочитать целочисленное значение из string. #4
sscanf
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
17.09.2011, 08:39     Подскажите как прочитать целочисленное значение из string. #5
Цитата Сообщение от Whiteha Посмотреть сообщение
к двухзначным например 74, во время преобразования добавляется 0, то есть atoi() возвращает 740.
а здесь поподробней
как у тебя из "74" получается 740
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 11:50  [ТС]     Подскажите как прочитать целочисленное значение из string. #6
Тот кусок кода я уже удалил и там действительно была такая проблема. Повторить не получается, здесь всё ОК...
C++
1
2
3
4
5
6
7
8
9
10
void main ()
{
    char buff[4];
    int res;
    buff[0] = '7';
    buff[1] = '4';
    res = atoi(buff);
    std::cout<<res<<std::endl;
    getch ();
}
LosAngeles
Заблокирован
17.09.2011, 12:07     Подскажите как прочитать целочисленное значение из string. #7
вроде в названии темы про string ведётся речь, а захожу и вижу
Цитата Сообщение от Whiteha Посмотреть сообщение
buff[4]
Цитата Сообщение от Whiteha Посмотреть сообщение
atoi()
ну если тебя действительно string интересует, то используй istringstream, вот я пример спёр с cpp.com
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// using istringstream constructors.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main () {
 
  int n,val;
  string stringvalues;
 
  stringvalues = "125 320 512 750 333";
  istringstream iss (stringvalues,istringstream::in);
 
  for (n=0; n<5; n++)
  {
    iss >> val;
    cout << val*2 << endl;
  }
 
  return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.09.2011, 17:22     Подскажите как прочитать целочисленное значение из string. #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
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct {
  char key[16];
  int  value;
} xData;
 
int key_value(const char* str, xData& data) {
  const char* val = strrchr(str, '=');
  char* skey;
  if(! val)
       return 0;
  for(skey = data.key; *str && *str != '='; *str++) {
         if(! isspace(*str))
                 *skey++ = *str;
  }
  *skey = '\0';
  while(isspace(*val++));
  data.value = atoi(val);
  return 1;
}
 
int  main(void) {
   char  buf[255];
   xData data[3];  // для 3-ёх пар
   int   index = 0, i;
 
   FILE* fp = fopen("D:\\data.txt", "r");
   while(fgets(buf, sizeof(buf), fp)) 
          index += key_value(buf, data[index]);
   fclose(fp);
 
  // теперь в массиве есть пара ключ=значение
  // вот вывод одних значений
  for(i = 0; i < index; i++) 
      printf("%d\n", data[i].value);
 
  // вывод пар
  for(i = 0; i < index; i++) 
       printf("\t%s = %d\n", data[i].key, data[i].value);
 
   getchar();
   return 0;
}
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 17:36  [ТС]     Подскажите как прочитать целочисленное значение из string. #9
Ребят, всем спасибо за идеи и предложения.
Проблема решена=)
asen
Заблокирован
18.09.2011, 06:57     Подскажите как прочитать целочисленное значение из string. #10
Советую сделать так:

[C++]
...
char a[10];
a="99+99=198";
int b=atoi(&a[3]);
...
[/C++]
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.09.2011, 07:20     Подскажите как прочитать целочисленное значение из string. #11
Цитата Сообщение от asen Посмотреть сообщение
char a[10];
a="99+99=198";
А что, это будет работать?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
18.09.2011, 07:33     Подскажите как прочитать целочисленное значение из string. #12
Цитата Сообщение от Whiteha Посмотреть сообщение
char buff[4];
int res;
buff[0] = '7';
buff[1] = '4';
res = atoi(buff);
это не строка это набор символов
в строке еще 0 должен быть в конце
хотя бы так
C++
1
2
3
buff[0] = '7';
 buff[1] = '4';
buff[2] = 0;
или так
C++
1
2
3
buff[0] = '7';
 buff[1] = '4';
buff[2] = '\0';
если ты вот так вводил
C++
1
2
3
buff[0] = '7';
 buff[1] = '4';
buff[2] = '0';
то понятно откуда 740 вместо 74
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2011, 08:19     Подскажите как прочитать целочисленное значение из string.
Еще ссылки по теме:

Как scanf ом прочитать строку string? C++
Прочитать весь string после знака || C++
C++ Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()?

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
18.09.2011, 08:19     Подскажите как прочитать целочисленное значение из string. #13
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
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<int>  T_numbers;
typedef std::string       T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void  read_numbers_from_file
    (
        const T_str&  filename,
        T_numbers&    numbers
    )
{
    std::ifstream  f( filename.c_str() );
    if(!f)
    {
        std::cerr << "Невозможно открыть файл "
                  << filename
                  << std::endl;
    }
 
    T_str  s;
    for(;;)
    {
        if( !(f >> s) ) break;
        if( !(f >> s) ) break;
        int  n;
        if( !(f >> n) ) break;
        numbers.push_back(n);
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_str      filename = "f.txt";
    T_numbers  numbers;
    read_numbers_from_file(filename, numbers);
 
    std::copy
        (
            numbers.begin(),
            numbers.end(),
            std::ostream_iterator<int>(std::cout, "\n")
        );
    std::cout << std::endl;
}
Yandex
Объявления
18.09.2011, 08:19     Подскажите как прочитать целочисленное значение из string.
Ответ Создать тему
Опции темы

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