Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
1

Строки в С

20.12.2010, 21:22. Показов 1154. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа, помогите! Осталось одно задание, но я никак не могу понять как его сделать.
Суть задания: Вводится, строка, с разделителями( двойными, тройными..пробелами и прочими разделителями (разделители передаются функции в качестве аргумента)), нужно удалить все разделители(оставив по одному пробелу между словами) и вывести строку в обратном порядке.

Я уже, что только не пробовал и через strtok и через strcpy, ну не получается никак, то где-то с адресами лажа, то копирует слова в исходном порядке. Кодом к сожалению не могу похвастать, сейчас с другой машины.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2010, 21:22
Ответы с готовыми решениями:

Ввести строки и через n символов первой строки вставить вторую строку, и так до конца строки
Помогите исправить баг задача состоит в следующем :ввести строку и простроку тоесть две строки и...

Даны три строки. Определить можно ли из символов третьей строки получить первую и вторую строки
Помогите пожалуйста! 1)Даны три строки. Определить можно ли из символов третьей строки получить...

Сравнить строки, первый несовпадающий элемент строки-приемника записать в регистр AL, строки-источника - в DL
Помогите написать программу на ассемблерене совсем еще разобрался с этим задание: Ввести с...

Слить две строки, вставив символы одной строки между символами другой строки
Строка a из n символов лексикографически меньше строки b из n символов, если существует такой...

2
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.12.2010, 10:16 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
#include <stdio.h>
 
int func(char *s, const char *d, const char *newsep);
 
int main(void)
{
    char line[100] = "abcdfe!@rfkls!@#jdf1!@#234";
    
    if (func(line, "!@#$%^&*()", " ") == 0)
        printf(".%s." "\n", line);
    
    return 0;
}
 
#include <stdlib.h>
#include <string.h>
 
int func(char *s, const char *d, const char *newsep)
{
    char *p, *scp;
    char firsttime;
    
    if ((scp = malloc(strlen(s) + 1)) == NULL)
        return -1;
    *scp = '\0';
    firsttime = 1;
    for (p = strtok(s, d); p != NULL; p = strtok(NULL, d)) {
        if (firsttime)
            firsttime = 0;
        else
            strcat(scp, newsep);
        strcat(scp, p);
    }
    strcpy(s, scp);
    free(scp);
    return 0;
}
Код
[guest@localhost tests]$ ./t
.abcdfe rfkls jdf1 234.
[guest@localhost tests]$
Добавлено через 2 часа 39 минут
переполнение может быть, если подать длинный разделитель
слова, разделённые таким разделителем, вылезут за край исходной строки, ну и памяти той
1
Заблокирован
Автор FAQ
24.12.2010, 13:54 3
Лучший ответ Сообщение было отмечено Sunman как решение

Решение

Это мой взгляд на проблему, решил обрабатывать строку без С-ных функций
Память под тсроку выделяется динамически поэтому её длина может быть любой...
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
#include <windows.h>
#include <stdio.h>
 
int sLen = 0;
char * str = (char *)malloc(sizeof(char));
char * enter_sring(int &m, char * str, char ch_end);
 
void main()
{
    str = enter_sring(sLen, str, '\n');
    for(int i = sLen - 1;0 <= i; i--)
    {
        printf("%c",str[i]);
        while(str[i] == ' ' && 0 <= i)
            i--;
    }
    printf("\r\n");
}
 
char * enter_sring(int &m, char * str, char ch_end)
{
    if(str != NULL)
    {
        m = 0;
        while((str[m] = getchar()) != ch_end)
        {
            m   = m + 1;
            str = (char *)realloc(str,(m + 1)*sizeof(char));
        }
        str[m] = '\0';
    }
    return str;
}
Миниатюры
Строки в С  
1
24.12.2010, 13:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2010, 13:54
Помогаю со студенческими работами здесь

Определить длину строки. Если длина строки >6, удалить часть строки в { } скобках.
Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши &quot;Ввод&quot;....

Строки. Определить длину введенной строки, если длина кратна 4, то первая часть строки меняется местами со второй
Ввести с клавиатуры строку символов.признак окончания ввода строки-нажатие клавиши ввод.Программа...

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки...

Строки. Если в конце строки точка отсутствует, то найти слово, заканчивающееся точкой и перенести его в конец строки.
Дана строка, состоящая из слов и содержащая одну точку в конце одного из слов. Если в конце строки...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru