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

Выбрать слово из массива С++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 21:31     Выбрать слово из массива С++ #1
Помогите пожалуйста!
Задача в чем: есть массив, в нем набор слов. Нужно выбрать к примеру 1 и 6 слово. Я понимаю что вроде это нужно сделать с помощью пробелов, ну никак не получается
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.02.2013, 21:43     Выбрать слово из массива С++ #2
Это получается массив, элементы которого - слова? Тогда так:
C++
1
2
char a[6][10]={"one", "two", "three", "four", "five", "six"};
std::cout<<a[0]<<" "<<a[5];
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 22:00  [ТС]     Выбрать слово из массива С++ #3
Я не правильно написал, мне нужно не вывести, а записать слова в массив из файла
Выглядит начало, я думаю, примерно так:
C++
1
2
3
4
5
6
7
8
9
char buffer[200];
int i=0, i2=0, a=0;
ifstream file("C:\\1.txt");
while(file.getline(buffer,200))
{
a=0;
while (buffer[i]!='\0')
{
if (buffer[i]==' ')
и дальше не могу придумать ничего
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.02.2013, 22:13     Выбрать слово из массива С++ #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
#include <cstring>
int main()
{
     char str[10][20] = {0};
     int i = 0;
     std::ifstream f("1.txt");
     while(!f.eof())
        f.getline(str[i++],20);     
     for (int  j = 0; j<i; ++j)
          std::cout<<str[j]<<'\n';
     return 0;
}
Содержимое файла для примера:
Код
one
two
three
four
five
six
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 22:37  [ТС]     Выбрать слово из массива С++ #5
Спасибо! Только у меня содержимое файла выглядит примерно так:
C++ (Qt)
1
2
3
one two three four five six seven...
one two three four five six seven
one two three four five six seven
И нужно выбрать все первые слова, и все шестые. Слова все разные, и получается их выбрать можно только по пробелам? Как быть в такой ситуации?

Добавлено через 7 минут
Нужно вывести все первые слова, и все шестые из каждого столбика. То есть:
C++ (Qt)
1
2
3
one six
one six
one six
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.02.2013, 23:16     Выбрать слово из массива С++ #6
Текст абсолютно произвольный? Т.е может быть такое, что 6-го слова может не быть? Или 1-го Что в таком случае делать? Знаки препинания любые?

Все первые и шестые в один массив записать?

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <cstring>
int main()
{
     char str[10][20] = {0};
     int i = 0;
     std::ifstream f("1.txt");
     while(!f.eof())
     {
        char buf[100] = {0};  
        f.getline(buf,100);  
          char* p = strtok(buf," ,?!:-"); 
          strcpy(str[i++],p);
          for (int i = 0; i<5; ++i)
            p = strtok(NULL," ,?!:-");  
          strcpy(str[i++],p); 
     }
     for (int  j = 0; j<i; ++j)
          std::cout<<str[j]<<'\n';
     return 0;
}
Код
one1 two three four five six1 seven...
one2 two three four: five!six2 seven
one3, two three four. five six3 seven
one4 two three, four five six4 seven...
one5 two three four five six5 seven
one6, two three four five six6 seven
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 23:30  [ТС]     Выбрать слово из массива С++ #7
Нет, текст не произвольный. В каждой строчке есть определенное количество слов, там больше 10
Первым словом в строчке идет всегда имя пользователя, а шестым - адрес сайта. Эти все слова, даже их можно назвать набором букв, разделены пробелами
Ну можно записать и в разные, просто что бы потом можно было вывести на экран:
C++ (Qt)
1
2
3
"имя - адрес"
"имя - адрес"
и т.д.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.02.2013, 23:32     Выбрать слово из массива С++ #8
Ну, и? Код подошел? Или точный пример того, что в файле, если не подходит, и что вывести.
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 23:37  [ТС]     Выбрать слово из массива С++ #9
Уже хорошо, выводит только первое слово из каждой строчки, шестые - нет
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.02.2013, 23:39     Выбрать слово из массива С++ #10
Конкретный пример файла сюда.
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 23:40  [ТС]     Выбрать слово из массива С++ #11
yura12 - 31.Jan.2013:09:11:59 +0200 /mrtg/images/la-day.png HTTP/1.1 "http://google.com/" "Mozilla/5.0 (Windows NT 5.1) (KHTML, like Gecko) Safari/537.11"
yura12 - 31.Jan.2013:09:11:59 +0200 /mrtg/images/la-day.png HTTP/1.1 "http://10.10.100.7/" "Mozilla/5.0 (Windows NT 5.1) (KHTML, like Gecko) Safari/537.11"

И должно получиться что-то такое:
C++ (Qt)
1
2
yura12 - [url]http://google.com[/url]
yura12 - [url]http://10.10.100.7[/url]
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.02.2013, 23:45     Выбрать слово из массива С++ #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <cstring>
int main()
{
     char str[10][300] = {0};
     int i = 0;
     std::ifstream f("1.txt");
     while(!f.eof())
     {
        char buf[300] = {0};  
        f.getline(buf,300);  
          char* p = strtok(buf," "); 
          strcpy(str[i++],p);
          for (int i = 0; i<6; ++i) // <--
            p = strtok(NULL," ");  
          strcpy(str[i++],p); 
     }
     for (int  j = 0; j<i; ++j)
          std::cout<<str[j]<<'\n';
     return 0;
}
Это просто нужно указать правильные разделители или позицию слова. Сейчас вроде правильно выводит. Но если нужно будет вывести другое слово, просто в отмеченном в коде месте по изменяйте число.
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 23:54  [ТС]     Выбрать слово из массива С++ #13
Спасибо большое!

Добавлено через 5 минут
Все равно выводит только первое слово у меня
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.02.2013, 00:39     Выбрать слово из массива С++ #14
Проверил на dev-cpp, VS 2012, все работает.

Добавлено через 2 минуты
Правда, выводит чуть по-другому, но это несложно исправить:
Код
yura12
"http://google.com"
yura12
"http://10.10.100.7"
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
11.02.2013, 00:47  [ТС]     Выбрать слово из массива С++ #15
понял, скорее всего это из-за Borland 3.1
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.02.2013, 00:59     Выбрать слово из массива С++ #16
Цитата Сообщение от live8 Посмотреть сообщение
из-за Borland 3.1
Скорее! Еще бы. Это же каких годов там компилятор.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
11.02.2013, 11:40     Выбрать слово из массива С++ #17
потоками гороздо проще, чем через strtok()

Добавлено через 1 час 6 минут
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
#include <iostream>
#include<fstream>
#include<string>
#include<vector>
#include <conio.h>
 
using namespace std;
 
int main (){
 
    vector<string> words;
    string one;
    string two;
    string dump;
    ifstream in ("c:\\file.txt");
    while(in)
    {
        in>>one>>dump>>dump>>dump>>dump>>two;
        words.push_back(one);
        words.push_back(two);
    }
 
    vector<string>::iterator iter;
    for(iter=words.begin();iter!=words.end();iter++)
        cout<<*iter<<" ";
 
 
    for(;!kbhit(););
 
    return 0;
}
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
11.02.2013, 20:36  [ТС]     Выбрать слово из массива С++ #18
Ну мне через strtok более понравилось. Еще нужна помощь. В файле, например, текст:
192.168.1.100 - [1.Jan.2012:09:11:59 +0200] "GET /mrtg/images/day.png HTTP/1.1" 200 1802 "http://google.com/" "Mozilla/5.0 (Windows NT 5.1) (KHTML, like Gecko) Chrome/23.0.1271.97"
192.168.1.100 - [1.Jan.2012:09:11:59 +0200] "GET /mrtg/images/day.png HTTP/1.1" 200 2803 "http://google.com/" "Mozilla/5.0 (Windows NT 5.1) (KHTML, like Gecko) Chrome/23.0.1271.97"
192.168.1.101 - [1.Jan.2012:09:11:59 +0200] "GET /mrtg/images/day.png HTTP/1.1" 200 1475 "http://google.com/" "Mozilla/5.0 (Windows NT 5.1) (KHTML, like Gecko) Chrome/23.0.1271.97"

У меня выводит:
C++ (Qt)
1
2
3
192.168.1.100 - 1802
192.168.1.100 - 2803
192.168.1.101 - 1475
А нужно что бы цифры суммировало, и выводило так:

C++ (Qt)
1
2
192.168.1.100 - 4605
192.168.1.101 - 1475
Помогите пожалуйста.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
11.02.2013, 21:58     Выбрать слово из массива С++ #19
Ну мне через strtok более понравилось. Еще нужна помощь.
Есле бы вы потрудились и попробовали разобраться в предоставленных вам примерах, то помомощь вам бы уже не понадобилась
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 22:06     Выбрать слово из массива С++
Еще ссылки по теме:

Из массива выбрать четыре наибольших значения C++
Выбрать числа из массива А с заданным остатком от деления на M C++
C++ Из абсолютных величин элементов массива выбрать наибольшую

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

Или воспользуйтесь поиском по форуму:
live8
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
11.02.2013, 22:06  [ТС]     Выбрать слово из массива С++ #20
Не получается у меня именно суммировать числа для одного ip. Пол дня уже просидел и никак
Yandex
Объявления
11.02.2013, 22:06     Выбрать слово из массива С++
Ответ Создать тему
Опции темы

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