Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Rom@
22 / 22 / 12
Регистрация: 29.11.2009
Сообщений: 210
1

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

28.03.2010, 20:53. Просмотров 3857. Ответов 7
Метки нет (Все метки)

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

Разбить строку на лексемы и вывести лексемы в обратном порядке.
Ребята, помогите. Получил такое задание: Напишите программу, которая вводит строку текста,...

Разбить строку на цифры
Есть char-последовательность цифр.Пример:126456541324987. Длина от 1 цифры до 200. Как перевести...

Разбить строку на подстроки
Собственно, нужно следующее: пользователь вводит строку, например: "aaa bbb ccc", слово "aaa"...

Разбить строку на слова
здравствуйте форумчане, помогите разобраться. задание: вводится строка произвольной длинны....

Строку разбить на буквы
Как мне ввести слово самому, чтобы потом разбить на буквы???? Здесь есть уже введенное слово,...

7
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10491 / 6200 / 1558
Регистрация: 25.07.2009
Сообщений: 11,801
28.03.2010, 21:19 2
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SPCHARS " .,;:!?\t\n"
 
int main(void){
    char buf[BUFSIZ], **words, *p;
    int cnt, i;
 
    while ( 1 ){
        printf("String: ");
        if ( !fgets(buf, BUFSIZ, stdin) )
            exit(1);
        if ( *buf == '\n')
            break;
 
        words = NULL;
        cnt = 0;
        for ( p = strtok(buf, SPCHARS); p != NULL; p = strtok(NULL, SPCHARS) ){
            if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL )
                exit(1);
            if ( ( words[cnt] = strdup(p) ) == NULL )
                exit(1);
            ++cnt;
        }
 
        if ( !words || !cnt )
            exit(1);
        printf("Reverse words: ");
        for ( i = cnt - 1; i >= 0; --i )
            printf("%s ", words[i]);
        printf("\n");
 
        for ( i = 0; i < cnt; ++i )
            free(words[i]);
        free(words);
    }
    exit(0);
}
2
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10491 / 6200 / 1558
Регистрация: 25.07.2009
Сообщений: 11,801
29.10.2012, 03:43 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
#include <stdio.h>
#include <string.h>
 
void print_reverse_words(char * str, const char * delim) {
    char * ptr = strtok(str, delim);
    if ( ptr ) {
        print_reverse_words(NULL, delim);
        printf("%s ", ptr);
    }
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        printf("Reverse words: ");
        print_reverse_words(buf, DELIM);
        printf("\n");
    }
    
    return 0;
}
0
OlegLvovskyj
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
29.10.2012, 18:40 4
как сделать, чтобы не менялись местами слова.... немогу понять
0
29.10.2012, 18:40
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10491 / 6200 / 1558
Регистрация: 25.07.2009
Сообщений: 11,801
29.10.2012, 20:17 5
В каком смысле? Чтобы слова в том же порядке, но по одному выводились?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ], * p;
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        for ( p = strtok(buf, DELIM); p != NULL; p = strtok(NULL, DELIM) )
            printf("%s\n", p);
    
    return 0;
}
1
Liss29
27 / 16 / 4
Регистрация: 18.11.2012
Сообщений: 638
Завершенные тесты: 1
02.03.2017, 05:58 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 <cstring>
//#include <CyrIOS.h>
 
using namespace std;
int main()
{const int size = 100;
 
    char str1[size];
    cout << "Введите строку текста: ";
    cin.getline(str1, size);
    
    char* c = strtok(str, " ,-");
    
    while(c != NULL)
    {
        revers(c);
        c = strtok(NULL, " ,-");
    }
    
}
 
void revers(char* c)
{
    int end = strlen(c) - 1;
    for(int i = end; i >= 0; i--)
    {
        cout << c[i];
    }
cout << ' ';
}
0
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
02.03.2017, 06:27 7
Цитата Сообщение от Liss29 Посмотреть сообщение
Свой вариант выложу)
только не в тот раздел
0
Liss29
27 / 16 / 4
Регистрация: 18.11.2012
Сообщений: 638
Завершенные тесты: 1
02.03.2017, 20:24 8
Цитата Сообщение от LFC Посмотреть сообщение
только не в тот раздел
Чутка ошибся, пардон!
0
02.03.2017, 20:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2017, 20:24

Разбить символьную строку на две
Доброго времени суток! Помогите пожалуйста найти в ошибку в программе. Она должна разбивать...

Как разбить строку на символы
Есть символьная строка, как её разбить по элементам чтоб можно было сравнивать между собой?

Не получается разбить строку на слова
Подскажите пожалуйста почему не получается разбить строку на слова? strcat(string,&quot; &quot;); for...


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

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

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