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

Строку в массив через контрольный сивол - C++

Восстановить пароль Регистрация
 
SKDzR
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 91
16.07.2010, 23:50     Строку в массив через контрольный сивол #1
Здравствуйте, есть строка:
C++
1
std::string mystring = "first|second|third|raz|dva|tri";
какой функцией можно сделать так, чтобы эта строка перешла в массив таким образом:
например, название массива 'array':
array[0] = "first";
array[1] = "second";
array[2] = "third";
array[3] = "raz";
array[4] = "dva";
array[5] = "tri";

т.е. символ '|' служит разделителем.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.07.2010, 23:51     Строку в массив через контрольный сивол #2
SKDzR, strtok(char*str, char*Delim). Собсна через mystring.c_str() можно. А вообще посмотри на форуме. Недавно я спрашивал.

Собственно вот та программа.
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
#include <iostream>
#include <fstream>
#include <deque>
#include <sstream>
#include <algorithm>
#include <iterator>
 
int main()
{
        std::string str("An international edition was released on August 9, 2005, published by Drakkar, with a different track listing");
        std::string punct(",!.:?");
        size_t index;
        //Меняем встретившиеся знаки препинания на пробелы
        while((index=str.find_first_of(punct))!=std::string::npos)
                str[index]=' ';
        std::stringstream ss(str);
        std::deque<std::string> dq;
        std::string temp;
        while(ss >> temp)
                dq.push_back(temp);
        std::copy(dq.begin(), dq.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
        system("pause");
        return EXIT_SUCCESS;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.07.2010, 00:08     Строку в массив через контрольный сивол #3
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
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
int main(){
    std::string buf; // на сколько понимаю, должно читаться из файла, но тут для простоты с консоли
    const char SEPARATOR = '|';
    
    while ( true ){
        std::cout << "String: ";
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        std::istringstream ist(buf);
        std::vector<std::string> vec;
        while ( std::getline(ist, buf, SEPARATOR) )
            vec.push_back(buf);
        
        for ( std::vector<std::string>::const_iterator i = vec.begin(); i != vec.end(); ++i )
            std::cout << *i << std::endl;
    }
    
    return 0;
}
ForEveR
17.07.2010, 00:12
  #4

Не по теме:

easybudda, Сижу себе читаю программу. Увидел вот это SEPARATOR. Испугался)

CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.07.2010, 01:07     Строку в массив через контрольный сивол #5
SKDzR, boost:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <boost\algorithm\string.hpp>
#include <boost\lambda\lambda.hpp>
#include <string>
#include <vector>
#include <iostream>
#include <functional>
 
int main() {
  std::string              str    = "first|second|third|raz|dva|tri";
  std::vector<std::string> result;
 
  boost::split(result, str, std::bind2nd(std::equal_to<char>(), '|'));
 
  std::for_each(result.begin(), result.end(), std::cout << boost::lambda::_1 << '\n');
 
  return 0;
}
SKDzR
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 91
17.07.2010, 12:04  [ТС]     Строку в массив через контрольный сивол #6
делаю по третьему посту, такой кусок кода:
C++
1
2
3
4
5
char *get_table_names[21];
std::string table_names;
// ....
get_table_names[mycount] = table_names.c_str();
// ....
Ругается, естественно на преобразование const char* в char*.
вечный вопрос, как править?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.07.2010, 12:11     Строку в массив через контрольный сивол #7
Не смешивай STL и обычные массивы, строки в кучу. Либо используй только STL'ие контейнеры и строки, либо не используй вообще.
Цитата Сообщение от SKDzR Посмотреть сообщение
get_table_names
Память под этот массив выделил?
Цитата Сообщение от SKDzR Посмотреть сообщение
get_table_names[mycount] = table_names.c_str();
Так строки не копируются, используй strcpy.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2010, 12:17     Строку в массив через контрольный сивол
Еще ссылки по теме:

C++ Символы.Вывести на экран сивол после символа а
C++ Ввод с клавиатуры массив из пяти целочисленных значений. Вывести их в одну строку через запятую. Получить для массива среднее арифметическое
C++ Функции посчитывающие количество вхождений подстроки в строку, реализация через char* и через шаблон

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

Или воспользуйтесь поиском по форуму:
SKDzR
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 91
17.07.2010, 12:17  [ТС]     Строку в массив через контрольный сивол #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Так строки не копируются, используй strcpy.
ранее изученный мною PHP даёт о себе знать)
ок, спасибо, пошёл пробовать)
Yandex
Объявления
17.07.2010, 12:17     Строку в массив через контрольный сивол
Ответ Создать тему
Опции темы

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