С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Sunman
56 / 56 / 4
Регистрация: 02.03.2010
Сообщений: 406
#1

Строки в С - C++

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

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

Я уже, что только не пробовал и через strtok и через strcpy, ну не получается никак, то где-то с адресами лажа, то копирует слова в исходном порядке. Кодом к сожалению не могу похвастать, сейчас с другой машины.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2010, 21:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки в С (C++):

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

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк - C++
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно сделать задание: "Добавить строки, начиная...

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2 - C++
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки, начиная со строки К1 и до строки К2 вот...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней - C++
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка...

Вычислить длину введенной строки и вывести символы строки с четными индексами - C++
Напишите программу, которая требует ввода строки с клавиатуры. Программа вычисляет длину строки и выводит на экран только те символы...

Найти среднее арифметическое каждой строки матрицы и отсортировать строки по возрастанию - C++
Дана квадратная матрица. Найти среднее арифметическое каждой строки и отсортировать строки по возрастанию этих характеристик

2
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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
Это мой взгляд на проблему, решил обрабатывать строку без С-ных функций
Память под тсроку выделяется динамически поэтому её длина может быть любой...
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
Миниатюры
Строки в С  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2010, 13:54
Привет! Вот еще темы с ответами:

Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A - C++
&quot;Даны строки A и B. Если в A есть латинские буквы, а в B нет повторяющихся символов, то упорядочить символы B в алфавитном порядке и...

Как считать строки из файла, если там больше одной строки? - C++
Как считать строки из файла в массив. Если в файле одна строка, то нет проблем, но если несколько, то при использовании функции fgets ...

Как первые два символа строки переставить в конец этой строки? - C++
Собственно вопрос

Указать номер строки, максимально удаленной от первой строки заданной матрицы - C++
Задание: Расстояние между k-й и 1-й строками квадратной матрицы А опеределяется как r = сумма от j=1 до N от (abs(akj)*abs(a1j)). Указать...


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

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

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