0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 7
1

Перевод элементов из string в массив char

23.02.2015, 23:05. Показов 1772. Ответов 9
Метки нет (Все метки)

Я задался целью создать небольшую программу, которая бы открывала текстовый файл, считывала символы из него и заносила их все в один массив. Потом нужно проходить по нему, искать нужные мне сочетания из трех конкретных букв и выводить слова, в которых эти словосочетания есть. Например, из файла

Обеликс
Пиксар
Ди каприо
Американская история икс


должна вывести слова Обеликс, Пиксар, Американская история икс, если я задам сочетание "ИКС". Так вот, я застопорился в самом начале, когда нужно занести все буквы из файла в массив.
Вот код, в котором я для себя вывожу весь массив s и потом первый элемент s[0]:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string * s;
    s = new string[100];
    ifstream fi("words.txt");
    for (int i = 0; i < 10; i++)
        fi >> s[i];
    for (int i = 0; i < 10; i++)
        cout << s[i];
    cout << endl << s[0] << endl;   
    fi.close();
    system("pause");
    return 0;
}
Получаю:
ОбеликсПиксарДикаприоАмериканскаяисторияикс
Обеликс


Как бы мне перевести это всё в чар, чтобы было удобней искать отдельные символы?
И если я пошел неправильным путем, хотелось бы услышать варианты, как реализовать программу проще. Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2015, 23:05
Ответы с готовыми решениями:

Перевод из string в массив char
char arrays = a.ToCharArray() Перевожу из стринга в массив чар, но мне нужно, чтобы нулевой и...

Перевод String^ в массив типа char (визуальное программирование)
Перевод String^ в массив типа char(визуальное программирование) У меня в обработчике событий...

Переделать string на массив элементов типа char
Добрый вечер ,как будет выглядеть программа ,если ее переделать под массив типа чар. Ну как-то так...

есть массив char. есть строка string. как присвоить значению string-a значение char-a?
есть массив char. есть строка string. как присвоить значению string-a значение char-a?

9
528 / 430 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.02.2015, 23:48 2
Цитата Сообщение от Albert_Molodec Посмотреть сообщение
считывала символы из него и заносила их все в один массив. Потом нужно проходить по нему, искать нужные мне сочетания из трех конкретных букв и выводить слова, в которых эти словосочетания есть.
Памяти больно много жрать будет, да и лишние операции чтения/записи в памяти. Ищи лучше сразу по ходу считывания их файла.
0
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 7
23.02.2015, 23:56  [ТС] 3
А вы не могли бы вкратце пояснить, как это примерно сделать? Я не очень опытен в программировании.
Но что касается памяти. Она не особо меня беспокоит. Мне бы хоть как-нибудь решить задачу
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
24.02.2015, 00:01 4
Обрабатывай файл построчно в процессе считывания. И не нужен здесь char, поиск подстроки есть в string.
0
528 / 430 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
24.02.2015, 00:30 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
#include<iterator>
 
int main()
{
        std::ifstream in_file("file");
        std::copy_if(std::istream_iterator<std::string>(in_file), std::istream_iterator<std::string>(), std::ostream_iterator<std::string>(std::cout,"\n"),
        [](const std::string& word) { return (word.find("tus") != std::string::npos);});
        in_file.close();
}
1
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 7
24.02.2015, 19:24  [ТС] 6
Оу, спасибо большое. Я правда не очень понял, как работают итераторы, но результат меня полностью устроил)
Теперь я хочу создать цикл, который бы создавал 35937 различных трехбуквенных сочетаний (33 буквы русского алфавита в третьей степени) и выводил все сочетания, которые есть как минимум в трех словах (такова цель программы в общем)
Например, если расширить список слов до:

обеликс
пиксар
ди каприо
ватерлоо
американская история икс
ватсон
аватар


То нужно вывести "икс" и "ват". И тут у меня 2 вопроса:
1) Как генерировать такие сочетания?
2) Как вставлять их сюда?
C++
1
return (word.find("икс") != string::npos);
0
1369 / 592 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
24.02.2015, 21:43 7
Лучший ответ Сообщение было отмечено Albert_Molodec как решение

Решение

Цитата Сообщение от Albert_Molodec Посмотреть сообщение
1) Как генерировать такие сочетания?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string alphabet;
    for (int i='а';i<'я'+1;i++){
            if (i=='ж') alphabet=alphabet+char('ё');
            alphabet=alphabet+char(i);
    }
 
    for (int i=0;i<33;i++){
        for (int j=0;j<33;j++){
            for (int k=0;k<33;k++){
                cout<<alphabet[i]<<alphabet[j]<<alphabet[k]<<"\n";
                
            }
        }
    }
Добавлено через 1 час 49 минут
Цитата Сообщение от Albert_Molodec Посмотреть сообщение
и выводил все сочетания, которые есть как минимум в трех словах (такова цель программы в общем)

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
string GetAlphabet(){
    string alphabet;
        vector<string> v2;
            for (int i='а';i<'я'+1;i++){
                    if (i=='ж') alphabet=alphabet+char('ё');
                    alphabet=alphabet+char(i);
            }
    return alphabet;
}
 
vector<string> GetSochet(string alphabet){
    string temp;
    vector<string> v2;
        for (int i=0;i<33;i++){
                for (int j=0;j<33;j++){
                    for (int k=0;k<33;k++){
                           temp=alphabet[i];
                           temp=temp+alphabet[j];
                           v2.push_back(temp+alphabet[k]);
 
                    }
                }
            }
    return v2;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    vector<string> v;
    string temp;
 
    ifstream fi("words.txt");
 
        while (!fi.eof()){
            getline(fi,temp);
            v.push_back(temp);
        }
    fi.close();
 
 
////////////////////////////
    string alphabet=GetAlphabet();
    vector<string> sochet=GetSochet(alphabet);
////////////////////////////
 
    vector<string>::iterator it1,it2;
    int count=0;
    vector<string> ResultWord;
 
    for (it1=sochet.begin();it1!=sochet.end();it1++) {
            count=0;
            ResultWord.clear();
            for (it2=v.begin();it2!=v.end();it2++){
                if ((*it2).find(*it1)!=string::npos) {
                        //cout<<*it1<<") "<<*it2<<"\n";
                        count++;
                        ResultWord.push_back(*it2);
                }
            }
 
            if (count>2) {
                cout<<"================\nСочетание: "<<*it1<<"\n================\n";
                for (vector<string>::iterator w=ResultWord.begin();w!=ResultWord.end();w++){
                    cout<<*w<<"\n";
                } cout<<"================\n\n\n";
            }
 
 
    }
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 7
24.02.2015, 21:54  [ТС] 8
daslex, У меня компилятор ругается на один getline и два << после cout. С чем это может быть связано?
Миниатюры
Перевод элементов из string в массив char  
0
daslex
24.02.2015, 22:26
  #9

Не по теме:

std::getline
std::cout

#include <string>
#include <iostream>

using namespace std;

Может что-то из этого упущено?

0
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 7
24.02.2015, 22:33  [ТС] 10
daslex, Я библиотеку <string> не подключил. Теперь всё ок. Большущее спасибо)
Код
================
Сочетание: икс
================
Обеликс
Пиксар
Американская история икс
================
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2015, 22:33
Помогаю со студенческими работами здесь

Перевод из string в char
Хочу перевести из String в char но что та не получается. ошибка такая: инициализация: невозможно...

Перевод String В Char
Необходимо перевести считаную строку с Edit1 в массив типа char для дальнейший обработки данной...

Перевод из String в Char
Добрый вечер форум. У меня не получается перевод из string в char, использую sprintf. #define...

Перевод char в string
заносит в f вот такое System.CharSystem.Char хотя по идее левая и правая переменная имеет же...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru