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

Удобная работа со строками в Visual C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
28.11.2012, 13:25     Удобная работа со строками в Visual C++ #1
Для меня С++ не главный язык программирования, поэтому заморачиваться не хочу. Напрягает жуткая сложность работы со строками. Может, существуют какие-то третьесторонние средства? Совместимость и кроссплатформенность моим прогам не нужны. Допустим, есть такая задача. Передаём в функцию массив строк или чисел (можно две разных функции). Она должна вернуть строку вида "Числа = 1, 2, 3...". Потом эту строку сбросим в файл. Что посоветуете?


Файл в конечном счёте должен будет выглядеть примерно так:

Имена = Александр, Дмитрий, Валентин, Ирина
Отчества = Евгеньевич, Осипович, Георгиевич, Сергеевна
Фамилии = Дозоров, Польских, Бурдюков, Казанец
ГодРожд = 1979, 1980, 1981, 1966
Должности = директор, замдиректора, юрисконсульт, бухгалтер
Зарплаты = 300000, 250000, 200000, 150000
Премии = 100000, 50000, 50000, 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 13:25     Удобная работа со строками в Visual C++
Посмотрите здесь:

C++ Работа со строками
C++ Работа со строками
C++ Работа со строками
Работа со строками C++
РАБОТА СО СТРОКАМИ. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.11.2012, 13:39     Удобная работа со строками в Visual C++ #2
C++
1
2
3
4
5
6
7
8
char Digit[40];
char outstring[120];
unsigned long Money[size];
char name[30][size];
for (int i=0; i<size; i++){
  sprintf(Digit, "%d, %s\n", Money[i], name[i]);
  strcat(outstring, Digit);
}
Добавлено через 5 минут
точнее %ld
ps10n1ck
 Аватар для ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
28.11.2012, 13:40     Удобная работа со строками в Visual C++ #3
сделать перегрузку функции:
в первую передаем указатель на строку (массив строк), а во второй указатель на массив чисел и дальше делаете то, что вам нужно
для быстрой работы со строками можно использовать std::string
для работы с числами можно сделать, что-то на подобии:
записать в файл строку "ГодРожд = ", а потом по очереди записывать числа, которые вам нужны (тут не нужно будет и заморачиваться с преобразованием числа в строковый тип) и после записи числ установить символ конца строки
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.11.2012, 13:46     Удобная работа со строками в Visual C++ #4
Для работы со строками нужно использовать std::string. Это не C, начинать изучение C++ с использованием c-style строк - фатальная ошибка.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
28.11.2012, 14:11     Удобная работа со строками в Visual C++ #5
Можно написать шаблон функции, в качестве аргумента будет некий контейнер объектов. В функции будет реализован пребор элементов контейнера и помещение их строкового представления в std::stringstream. И уже из него можно получить строку.

Добавлено через 17 минут
Кривовато, но идея такая
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
#include <iostream>
#include <sstream>
#include <vector>
 
template<class Iterator>
std::string Concat(Iterator first, Iterator last, const std::string& delimiter = ", ")
{
    std::stringstream ss;
    Iterator it = first;
    while (it != last)
    {
        ss << *it++;
        if (it != last)
        {
            ss << delimiter;
        }
    }
 
    return ss.str();
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int arr[] = {1, 2, 3, 4, 5};
    std::vector<int> v(arr, arr + sizeof(arr) / sizeof(*arr));
 
    std::cout << Concat(v.begin(), v.end()) << std::endl;
 
    return 0;
}
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
28.11.2012, 14:15  [ТС]     Удобная работа со строками в Visual C++ #6
1. Насчёт быстрой работы со строками - скорость не важна. Ну, будет работать не тысячные доли секунды, а сотые.
2. Я не собираюсь "начинать изучение С++". Там код на пару десятков строк получится. И основная его задача - сбросить данные в файл, чтобы потом другая программа (на более любимом языке программирования) их обработала.
3. Контейнеры, шаблоны... Мне этих умных слов хватило, когда я поддался зомбёжке и попытался зачем-то изучать Джаву. Сейчас грустно вспоминать, сколько я потратил времени зря. Может, я "подвергся необратимой умственной деградации". А может, для реальных программ диалекты Бейсика и скриптовые языки эффективнее в 99% случаев.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.11.2012, 14:20     Удобная работа со строками в Visual C++ #7
2. Я не собираюсь "начинать изучение С++". Там код на пару десятков строк получится. И основная его задача - сбросить данные в файл, чтобы потом другая программа (на более любимом языке программирования) их обработала.
Тем более не стоит мараться с C-строками.
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
28.11.2012, 14:21  [ТС]     Удобная работа со строками в Visual C++ #8
4. Что думаете об идее задействовать библиотеку BOOST? Я слышал краем уха, что там есть более удобные средства для работы со строками и файлами.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.11.2012, 14:22     Удобная работа со строками в Visual C++ #9
Цитата Сообщение от Vtulhu Посмотреть сообщение
Что думаете об идее задействовать библиотеку BOOST? Я слышал краем уха, что там есть более удобные средства для работы со строками и файлами.
Чем конкретно неудобен std::string? Для этой задачи.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
28.11.2012, 14:30     Удобная работа со строками в Visual C++ #10
Цитата Сообщение от Vtulhu Посмотреть сообщение
4. Что думаете об идее задействовать библиотеку BOOST? Я слышал краем уха, что там есть более удобные средства для работы со строками и файлами.
Для конкретной задачи решение приведено выше, занимает 15 строк. Нет необходимости тянуть буст в мелкую программу.
ps10n1ck
 Аватар для ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
28.11.2012, 15:00     Удобная работа со строками в Visual C++ #11
вот как пример, на "скорую руку" было написано без всяких проверок и т.д.
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
#include <iostream>
 
bool WriteToFile(char* Word, std::string* StringArray, int ArraySize, FILE *pFile){
  fputs(Word,pFile);
  for(int i = 0; i < ArraySize; ++i){
    fputs(StringArray[i].data(),pFile);
    if(i != ArraySize-1)
      fputs(", ",pFile);
  }
  fputs("\n",pFile);
  return true;
}
 
bool WriteToFile(char* Word, int* iData, int ArraySize, FILE *pFile){
  char buf[100];
  char *Year;
  fputs(Word,pFile);
  for(int i = 0; i < ArraySize; ++i){
    Year = itoa(iData[i], buf, 10);
    fputs(Year,pFile);
    if(i != ArraySize-1)
      fputs(", ",pFile);
  }
  fputs("\n",pFile);
  return true;
}
 
int main() {
 
  const unsigned int ArraySize = 4;
  std::string *pStringArray = new std::string[ArraySize];
  int *pIntArray = new int [ArraySize];
 
  FILE *file = fopen("file.dat", "w+");
 
  pStringArray[0] = "Вася";
  pStringArray[1] = "Петя";
  pStringArray[2] = "Маша";
  pStringArray[3] = "Паша";
 
  pIntArray[0] = 1985;
  pIntArray[1] = 1295;
  pIntArray[2] = 1975;
  pIntArray[3] = 1585;
 
  WriteToFile("Имена: = ", pStringArray, ArraySize, file);
  WriteToFile("ГодРожд: = ", pIntArray, ArraySize, file);
 
  fclose(file);
 
  delete [] pStringArray;
  delete [] pIntArray;
return 0;
}
результат работы в файле:
[img]http://s018.***********/i509/1211/ee/6f36e13b5ba1t.jpg[/img]
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.11.2012, 15:18     Удобная работа со строками в Visual C++ #12
Цитата Сообщение от Герц Посмотреть сообщение
Тем более не стоит мараться с C-строками.
Что значит "мараться"? Начинать программирование следует именно от простого к сложному. В идеале от ассемблера можно было бы порекомендовать начинать. Но так как при программировании на асме чаще всего (в большинстве случаев) никаких трюков не выполняется, а в основном рутинное наполнение в нужном порядке регистров и стека, то программирование на Си, отличается от него, только более удобным макроязыком, а приёмы по сути те же. Именно поэтому, я рекомендую начинать изучать программирование с Сей, чтобы "почувствовать" память, набить все ранние шишки, которые оставят в памяти знания о механизмах работы программ. И лишь потом переходить к каким-то более макроскопическим вещам, которые иначе бы пришлось использовать, не подозревая об их внутренних механизмах работы.
denys_l
28.11.2012, 15:41
  #13

Не по теме:

Философия С/С++ заключается в предоставлении всех необходимых инструментов для создания собственных эффективных или (неэффективных) приложений и Страуструп об этом где-то упоминал... Не нравится работа string - можно написать собственный класс с собственными методами для работы со строками. Можно писать сайты на ВордПресс, а можно прописывать каждый элемент вручную, можно прописывать кучу строк для создания бесполезного пустого окна, а можно вызывать како-нибудь CreateForm() и вообще не понимать как оно там работает... вообще подход к изучению языков программирования не ясен

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2012, 18:09     Удобная работа со строками в Visual C++
Еще ссылки по теме:

C++ работа со строками
работа со строками C++
C++ Работа со строками (Visual Studio 2010 С++)

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

Или воспользуйтесь поиском по форуму:
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
28.11.2012, 18:09  [ТС]     Удобная работа со строками в Visual C++ #14
Я очень хорошо понимаю, как работают компьютеры. Начал изучать их 25 лет назад. Первый мой комп имел проц частотой 3.5 МГц и память 48 Кб. Потому и приходилось кодить на асме. Но сейчас использовать асм, С++ или даже Delphi - это мазохизм, ИМХО. Мне гораздо более интересны Бейсики и немножечко F# (так, для общего развития).
Yandex
Объявления
28.11.2012, 18:09     Удобная работа со строками в Visual C++
Ответ Создать тему
Опции темы

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