Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
1

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

16.09.2011, 23:52. Показов 2168. Ответов 12
Метки нет (Все метки)

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

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

Наставьте на путь! Пожалуйста=)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2011, 23:52
Ответы с готовыми решениями:

Как получить целочисленное значение переменной?
как получить целочисленное значение переменной пример var num:Number = 120.2154654321654; получить...

Как прочитать XML из String
Подскажите способ чтения XML из переменной string Спасибо!

Как scanf ом прочитать строку string?
как scanf ом прочитать строку string?

List<string>. Как сохранить/прочитать в XML?
Пробую сохранить/прочитать в XML следующим способом. Класс CreateList.cs public class...

12
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.09.2011, 00:20 2
C
1
2
3
char buf[20] = { 0 }; //19 символов под имя переменной
int d;
fscanf("%s = %d", buf, &d);
1
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 01:26  [ТС] 3
А есть варианты по обработке символьного массива?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.09.2011, 01:30 4
sscanf
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
17.09.2011, 08:39 5
Цитата Сообщение от Whiteha Посмотреть сообщение
к двухзначным например 74, во время преобразования добавляется 0, то есть atoi() возвращает 740.
а здесь поподробней
как у тебя из "74" получается 740
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 11:50  [ТС] 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 ();
}
0
Заблокирован
17.09.2011, 12:07 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;
}
1
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.09.2011, 17:22 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;
}
1
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 17:36  [ТС] 9
Ребят, всем спасибо за идеи и предложения.
Проблема решена=)
0
Заблокирован
18.09.2011, 06:57 10
Советую сделать так:

[C++]
...
char a[10];
a="99+99=198";
int b=atoi(&a[3]);
...
[/C++]
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.09.2011, 07:20 11
Цитата Сообщение от asen Посмотреть сообщение
char a[10];
a="99+99=198";
А что, это будет работать?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
18.09.2011, 07:33 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
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
18.09.2011, 08:19 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;
}
0
18.09.2011, 08:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2011, 08:19
Помогаю со студенческими работами здесь

Прочитать содержимое List<Dictionary<string, string>>
Всем привет. Задача следующая: метод возвращает содержимое типа List&lt;Dictionary&lt;string, string&gt;&gt; и...

Как прочитать первую букву в тексте формата String
Знаю что тупой вопрос.

Как из unordered_map<string, string> получить значение по ключу
У меня есть такая штука. Как мне из нее получить значение по ключу? Я вот хочу написать string str...

Как написать функцию, которая бы получала на входе целочисленное число, а возвращала бы значение суммы цифр куба этого числа?
Сабж.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru