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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SKDzR
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 91
#1

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

16.07.2010, 23:50. Просмотров 429. Ответов 7
Метки нет (Все метки)

Здравствуйте, есть строка:
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";

т.е. символ '|' служит разделителем.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2010, 23:50     Строку в массив через контрольный сивол
Посмотрите здесь:

Разбить строку в массив через разделитель - C++
Здравствуйте уважаемые форумчане. Мне как новичку интересно как выполнить следующее. Необходимо разбить содержимое строки через...

Символы.Вывести на экран сивол после символа а - C++
В тексте есть буква а, и она не последняя. Вывести на экран букву, следующую за ней.

Функции посчитывающие количество вхождений подстроки в строку, реализация через char* и через шаблон - C++
Необходимо реализовать две функции: 1) int SubStrCount(const char *str, const char *subStr); 2) template<typename T>...

Как в массив скопировать массив, который заполнен через указатели - C++
Есть два файла допусти. Суть вопроса в том, что находится во втором файле. Как записать? car.h struct car { float massiv; ...

Вывод через строку - C++
Сейчас программа выдает через cout результат, а нужно сделать через строку Помогите пожалуйста как это реализовать) #include <string> ...

Передать строку через функцию. - C++
#pragma once class User { private: char *Surname; public: User(void); char SurnameReturn(); }

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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++
2300 / 1670 / 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++
2300 / 1670 / 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     Строку в массив через контрольный сивол
Еще ссылки по теме:

cin.getline переброс через строку - C++
Использую функцию cin.getline,но происходит вот такое чуДооО см картинку внизу Код char *Names = new char; char...

Запуск через командную строку с параметрами - C++
Помогите плиз!!! void main(int argc, char *argv) { int k,N; clrscr(); LIST *lst; FILE *fi,*fo; if (( fi = fopen(argv,&quot;r&quot;)) ==...

Как строку записать через printf - C++
Здравствуйте! Как строку in &gt;&gt; i &gt;&gt; j; Записать на си через printf ?

Не могу получить строку через getline - C++
Есть класс class door { public: float squaredoor (); //функция расчета площади двери void printdoor ();...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru