Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/49: Рейтинг темы: голосов - 49, средняя оценка - 4.59
slavaariec
0 / 0 / 0
Регистрация: 28.03.2010
Сообщений: 3
#1

Разбить строку на массив слов

05.04.2010, 12:50. Просмотров 8756. Ответов 4
Метки нет (Все метки)

Как разбить массив символов в отдельный массив по слову?Я вот что-то написал,проде бы правильно,но когда например ввожу строку "heavy metal rulit vsegda",то mas[2] выводится "rilitMMMMvsegda".


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i,j,g;
    char mas1[100],mas2[10][10];
    cout<<"Vvedite stroku ";
    gets(mas1);
    j=0;g=0;
    for(i=0;i<=99;i++){
                
    if(mas1[i]==32){j++;g=0;}
    else {mas2[j][g]=mas1[i];g++;};
        }; 
   
    cout<<mas2[2];
        
    getch();

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2010, 12:50
Ответы с готовыми решениями:

Как разбить строку на массив слов?
Надо разбить строку на массив строк при помощи разделителя... Какой функцией...

Разбить строку на массив слов используя strtok()
Мне нужно разделить строку на массив слов используя функцию strtok(), но...

Подскажите как разбить строку на массив слов разделителем
нужно разбить строку на массив строк для дальнейшей обработки, подскажите...

Читать строку типа string из файла, разбить ее на массив слов типа char
Нужно сделать так что бы строчка вида &quot;&lt;слово1&gt;:&lt;слово2&gt;:&lt;слово3&gt;:&lt;слово4&gt;&quot; ,...

Функция, получает строку слов и рзделителей, а на выходе имеет массив слов из строки и количество этих слов
мне нужна функция, которая во входе получает строку слов и рзделителей (&quot; &quot;,...

4
GreyDark
8 / 8 / 1
Регистрация: 11.02.2010
Сообщений: 21
05.04.2010, 15:07 #2
У меня твой код работает, выдаёт "rulit".
0
Fujiwara no Sai
9 / 9 / 1
Регистрация: 03.04.2010
Сообщений: 22
05.04.2010, 16:21 #3
Не правильно выводишь конечный массив. В строке 9 ты делаешь разбиение строки слов на отдельные слова, и каждое слово записываешь в новую строку двумерного массива. Т.е., строка Heavy metal rulit, введенная в программу, будет преобразована так: Heavy запишется в первую строку двумерного массива, metal - во вторую, rulit - в третью. Причем, поскольку в эту строку(mas1[]) не введено 100 символов, то оставшееся место, у меня, например, будет заполнено значением 52(если рассматривать в аски-коде). Естественно, что когда мы этот массив запишем в двумерный, эти "остатки" никуда не пропадут, и допишется в каждую строку в конце. И когда ты начнешь выводить на экран двумерный массив, то у тебя выведутся и эти символы тоже. В общем, я тут в твою программу добавил пару циклов вывода на экран(для контроля). Запустишь - поймешь про что я говорю. И последнее, я бы на твоем месте не стал использовать функцию gets(), т.к. способа ограничить число символов, полученное через эту функцию - нет. Это значит, что в случае очень длинной строки может быть переполнение массива. Есть функция fgets() - у нее синтаксис немного сложнее, но зато таких проблем нет.

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
# include <iostream>
# include <conio.h>
 
using namespace std;
 
int main()
{
    int i,j,g;
    char mas1[100],mas2[10][10];
 
    cout<<"Vvedite stroku ";
    gets(mas1);
    cout<<endl;
 
    //Выведем на экран то, что ввели
    for(int i=0;i<99;i++)
    cout<<mas1[i];
 
    //перепишем в двумерный массив
     j=0;g=0;
     for(i=0;i<99;i++)
    {
        if(mas1[i]==32)
        {
            j++;
            g=0;
        }
                else 
        {
            mas2[j][g]=mas1[i];
            g++;
        }
    }; 
   
    _getch();
 
    //выведем двумерный массив на экран
    for(i=0;i<10;i++)
    {
        cout<<"\nNovaya stroka: ";
        for(j=0;j<10;j++)
            cout<<mas2[i][j];
    }
 
    //выведем двумерный массив в аски-коде, чтобы было понятно что будет записано в
        //"пустое" место в конце
    for(i=0;i<10;i++)
    {
        cout<<"\nNowayz stroka: ";
        for(j=0;j<10;j++)
            cout<<(int)mas2[i][j];
    }
        _getch();
    return 0;
}
0
slavaariec
0 / 0 / 0
Регистрация: 28.03.2010
Сообщений: 3
05.04.2010, 20:22  [ТС] #4
Ну а вот при таком коде по идее должно ведь правильно работать?А все равно выводит по мимо слов лишние знаки.
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 "stdafx.h"
#include <iostream>;
#include "conio.h"
#include <locale.h>
using namespace std;
void main()
{
    setlocale(LC_ALL,"Russian");
    int i,j,g;
    char mas1[100],mas2[10][10];
    cout<<"Vvedite stroku ";
    gets(mas1);
    j=0;g=0;
    for(i=0;i<=99;i++){
        if(mas1[i]!=0){     
    if(mas1[i]==32){j++;g=0;}
    else {mas2[j][g]=mas1[i];g++;};
        }; }
   
        cout<<mas2[1];
        
    
    getch();
}
0
ISergey
Maniac
Эксперт С++
1408 / 919 / 148
Регистрация: 02.01.2009
Сообщений: 2,748
Записей в блоге: 1
05.04.2010, 20:40 #5
Цитата Сообщение от slavaariec Посмотреть сообщение
Как разбить массив символов в отдельный массив по слову?
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
#include <algorithm>
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
 
 
std::vector<std::string> line_to_arr(const std::string &line){
    std::stringstream ss(line);
    std::vector<std::string> res;
    std::copy
        (
        std::istream_iterator<std::string>(ss),
        std::istream_iterator<std::string>(),
        std::back_inserter(res)
        );
    return res;
}
int main(){
 
    std::string line = "heavy metal rulit vsegda";
    std::vector<std::string> res = line_to_arr(line);
    std::vector<std::string>::iterator i = res.begin();
 
    for(; i != res.end(); ++i)
        std::cout << *i << std::endl;
    return 0;
}
http://codepad.org/bfv28BOF
0
05.04.2010, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2010, 20:40

Разбить входную строку, состоящую из трех слов, на слова
Нужно написать программу, которая записывает входную строку состоящюю из трех...

Разбить строку в массив через разделитель
Здравствуйте уважаемые форумчане. Мне как новичку интересно как выполнить...

Разбить строку(с числами) и записать в массив
Здраствуйте! У меня есть стринг line например &quot;0.1 0.2 0.3 0.4&quot; И мне нужно...


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

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

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