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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.74
slavaariec
0 / 0 / 0
Регистрация: 28.03.2010
Сообщений: 3
#1

разбить строку в массив - C++

05.04.2010, 12:50. Просмотров 7853. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос разбить строку в массив (C++):

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

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

Строку AnsiString разбить по словам и засунуть в массив - C++
Есть строка: AnsiString s= &quot;Дед%Мазай%Любил%Больших%Девочек&quot;; как её можно разбить по словам и каждое слово записать в отдельную...

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

Подскажите пожалуйста как разбить строку на массив слов? - C++
Надо разбить строку на массив строк при помощи разделителя... Какой функцией для этого надо восьпользоваться?

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
GreyDark
8 / 8 / 1
Регистрация: 11.02.2010
Сообщений: 21
05.04.2010, 15:07 #2
У меня твой код работает, выдаёт "rulit".
0
Fujiwara no Sai
9 / 9 / 0
Регистрация: 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
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2010, 20:40
Привет! Вот еще темы с ответами:

Разбить введенную строку на слова и выделить под каждое слово отдельный массив - C++
Ребята помогите плиз! Задали задание, а сделать не могу( 1) Написать ф-ию, которая определяет является ли строка палиндромом 2)...

Разбить введенную строку на отдельные слова, выделив под каждое свой массив - C++
Тема: многомерные динамические массивы 1. Разбить введенную строку на отдельные слова, выделив под каждое свой массив.

Строка: Строку разбить на слова и слова запихнуть в массив char. - C++
Вобщем пока нужно: 1) строку разбить на слова и слова запихнуть в масив char. но у меня почему то вообще не то записывает в масив, хоча...

Разбить строку на слова, добавить эти слова в массив строк - C++
Привет всем! Понадобилось решить одну простенькую задачку: Разбить строку на слова, добавить эти слова в массив строк, вывести...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.04.2010, 20:40
Ответ Создать тему
Опции темы

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