Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 7

Перенос первого слова в конец строки.

29.12.2011, 22:50. Показов 4623. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать приложение, которое считывает строку текста и переносит первое сло*во в конец строки. Результат вывести на экран.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2011, 22:50
Ответы с готовыми решениями:

Перенос буквы в конец слова
В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 смволов, перенести первую букву каждого...

Перенос первых букв в конец слова
прошу помочь с задачей "Дано слово. перенести первые k его букв в конец"

Перенос буквы слова в конец.Кто-нибудь осилит?
В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 смволов, перенести первую букву каждого...

14
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
30.12.2011, 01:37
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
#include <Windows.h>
 
int main()
{
    char buf[100];
 
    printf("Enter string:\n");
    gets(buf);
 
    printf("\n%s %s\n", &buf[strlen(strtok(buf, " ")) + 1], buf);
        
    system("pause");
    return 0;
}
Считывает строку и выводит ее же, но с первым словом в конце.

П.С. На самом деле задача решается по другому. Я так понял нужно переставить слова в памяти, а затем вывести на экран.
Просто мне стало интересно, смогу ли я выполнить само условие в одну строчку программы.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
30.12.2011, 02:15
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 <iostream>
#include <cstring>
 
int main()
{
    const size_t size = 256;
    const char* delim = " ,.?!:;";
 
    char s[size];
    std::cout << "input string: ";
    std::cin.getline(s, size);
    std::cout << "source: " << s << std::endl;
 
    char* pch = s;
    while(*pch && std::strchr(delim, *pch)) ++pch;
 
    size_t count = 0;
    while(*(pch + count) && !std::strchr(delim, *(pch + count))) ++count;
 
    char* buf = new char[count];
    std::strncpy(buf, pch, count);
 
    std::memmove(pch, pch + count, std::strlen(pch + count));
    std::strncpy(s + std::strlen(s) - count, buf, count);
    delete[] buf;
 
    std::cout << "result: " << s << std::endl;
}
1
Фрилансер
Эксперт С++
 Аватар для Dekio
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,373
Записей в блоге: 1
30.12.2011, 02:31
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
 
int main()
{
    std::string Str;
    std::cout<<"Enter string:"<<std::endl;
    std::getline(std::cin, Str);
    std::size_t end, beg = Str.find_first_not_of(" ,.?!:;");
    end = Str.find_first_of(" ,.?!:;",beg);
    Str += " "+Str.substr(beg, end - beg);
    Str.erase(beg, end - beg);
    std::cout<<Str<<std::endl;
    system("pause");
    return 0;
}
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.12.2011, 06:14
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
 
void *swap ( char *str ) {
 
    uint8_t len = strlen( str );
    char buf[ len ];
    char *p = strchr( str, ' ' );
 
    if ( !p++ )
        return NULL;
    else {
        memmove ( buf, p, str + len - p );
        memmove ( buf + ( str + len - p), str, p - str );
        memmove ( str, buf, len );
    }
    return str;
}
 
int main( void )
{
    char str[] = "[(this)] is a string";
    char *p = swap( str );
 
    if ( !p )
        puts("oops");
    else
        puts( p );
    return 0;
}
1
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
30.12.2011, 07:00
alkagolik, в строке 9 вашего кода происходит создание нединамического массива. Я так понимаю что это сделано умышленно. Вопрос, почему? Мои соображения в том что до вызова функции размер массива неизвестен. Значит для него надо динамически выделять память. Заранее спасибо.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.12.2011, 15:19
Цитата Сообщение от greeezz Посмотреть сообщение
Вопрос, почему?
потому что назначение массива - хранить промежуточный результат. Конечный результат помещается в исходную область памяти как указано в ТЗ.
Цитата Сообщение от greeezz Посмотреть сообщение
Мои соображения в том что до вызова функции размер массива неизвестен. Значит для него надо динамически выделять память.
мыслите верно, но неверно . Будет правильным подходом создать массив константного размера, а вот уже константа должна зависеть от поставленной задачи. Нету смысла локать кучу при каждом вызове функции и тут же ее освобождать, лишняя работа, можно просто посчитать байты.
1
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
30.12.2011, 22:27
alkagolik, я честно говоря НЕдопонял.
вот тут
Цитата Сообщение от alkagolik Посмотреть сообщение
uint8_t len = strlen( str );
вычесляется длина строки.
потом тут
Цитата Сообщение от alkagolik Посмотреть сообщение
char buf[ len ];
создается массив имещий только что вычесленную длинну.
получается что размер массива заранее неизвестен. одни раз там может быть 20 другой 10 например ?

Добавлено через 1 минуту
я незнаю откуда но у меня почемуто застряло в голове что нельзя так делать в С.
с чем я путаю ? не знаете ?
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
30.12.2011, 22:41
Цитата Сообщение от greeezz Посмотреть сообщение
я незнаю откуда но у меня почемуто застряло в голове что нельзя так делать в С.
с чем я путаю ? не знаете ?
С С++? В C(точнее C99) так делать можно.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
30.12.2011, 22:46
Цитата Сообщение от rangerx Посмотреть сообщение
С С++? В C(точнее C99) так делать можно.
когда-то на этом форуме я написал программу и сослался на стандарт С99 что так делать можно.
а мне тут сказали что так делать нельзя потому что код будет не переносимым.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.12.2011, 23:14
Цитата Сообщение от greeezz Посмотреть сообщение
и сослался на стандарт С99 что так делать можно.
Да, это возможно! Это называется variable-length arrays http://ru.wikipedia.org/wiki/C99
http://codepad.org/6MES7IKI
Цитата Сообщение от greeezz Посмотреть сообщение
а мне тут сказали что так делать нельзя потому что код будет не переносимым.
Но лучше так не делать (В С++ это не возможно) http://codepad.org/9WjpRzHs
Как видите лучше использовать константы
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.12.2011, 23:40
Цитата Сообщение от greeezz Посмотреть сообщение
создается массив имещий только что вычесленную длинну.
получается что размер массива заранее неизвестен.
Цитата Сообщение от alkagolik Посмотреть сообщение
Будет правильным подходом создать массив константного размера, а вот уже константа должна зависеть от поставленной задачи.
ставим
опыт
C
1
2
3
4
5
6
7
8
9
10
int main( void )
{
    char str[] = "[(this)] is a string ";
    int i = 10;
    char *p = &str[ 0 ];
 
    while ( i-- )
        p = swap( p );
    return 0;
}
и смотрим в отладчике адрес начального элемента массива. Ставим второй
опыт
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 <string.h>
#include <stdint.h>
 
size_t const s = 40;
 
void *swap ( char *str ) {
 
    uint8_t len = strlen( str );
    char buf[ s ];
    char *p = strchr( str, ' ' );
 
    if ( !p++ )
        return NULL;
    else {
        memmove ( buf, p, str + len - p );
        memmove ( buf + ( str + len - p), str, p - str );
        memmove ( str, buf, len );
    }
    return str;
}
 
 
int main( void )
{
    char str1[] = "[(this)] is a string ";
    char str2[] = "[(this) 12 ";
    char str3[] = "[(this) 12 321 321 321 321 ";
    int i = 10;
    char *p = swap( str1 );
    p = swap( str2 );
    p = swap( str3 );
    return 0;
}
и видим тоже самое. Третий
опыт
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
 
void *swap ( char *str ) {
 
    uint8_t len = strlen( str );
    char buf[ len ];
    char *p = strchr( str, ' ' );
 
    if ( !p++ )
        return NULL;
    else {
        memmove ( buf, p, str + len - p );
        memmove ( buf + ( str + len - p), str, p - str );
        memmove ( str, buf, len );
    }
    return str;
}
 
int main( void )
{
    char str1[] = "[(this)] is a string ";
    char str2[] = "[(this) 12 ";
    char str3[] = "[(this) 12 321 321 321 321 ";
    int i = 10;
    char *p = swap( str1 );
    p = swap( str2 );
    p = swap( str3 );
    return 0;
}
видим что адрес буфера меняется, но он не возрастает постоянно, а меняется в зависимости от выравнивания судя по всему (это предположения). В любом случае ОС разбирается как лучше разместить массив в стеке.

Добавлено через 9 минут
а про ключик -std=c99 я уже и забыл, он у меня порписан в гуе опциях линкера.
1
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
31.12.2011, 00:17
go, да я знаю насчет variable-length arrays. Я знаю что такое в принципе возможно в С. сейчас просто пытаюсь для себя понять насколько это (... ка кбы выразиться..) резонно или корректно что ли.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
31.12.2011, 00:34
Если понимаешь что у тебя в руках и как оно работает то и АК под диваном хранить корректно.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
31.12.2011, 00:40
Цитата Сообщение от alkagolik Посмотреть сообщение
Если понимаешь что у тебя в руках и как оно работает то и АК под диваном хранить корректно.
Согласен! Можно сказать что мои вопросы в сторону этого мануала меня и двигают.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.12.2011, 00:40
Помогаю со студенческими работами здесь

Переместить первую букву слова в конец слова(Строки)
Здравствуйте уважаемые форумчане. Помогите пожалуйста. Напечатать все слова, заранее перенести первую букву слова в конец слова. Нужно...

Перенос букв в начало строки, а цифр в конец C++
Подскажите пожалуйста как осуществить данное преобразование на языке C++ Дана строка с цифрами и буквами, необходимо осуществить...

Написать программу добавления слова «hello» после первого слова введенной строки
Написать программу добавления слова «hello» после первого слова введенной строки C++

Написать программу добавления слова «hello» после первого слова введенной строки
Помогите( сколько искал ничего нету.

Добавление слова «salut» после первого слова введенной строки
Доброго времени суток. Нужна помощь со строками. Написать программу добавления слова «salut» после первого слова введенной строки. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru