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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчитать CRC для файла http://www.cyberforum.ru/cpp-beginners/thread420625.html
Здравствуйте! Есть имя файла. Как для этого файла подсчитать CRC? Проблема не в понимании алгоритма, а в том, что на данном языке я не писал уже несколько лет. Помогите, пожалуйста, быстренько набросать код. Добавлено через 14 минут Неужели никто не знает?
C++ Выравнивание строки по левому краю до заданной длины Разработать функцию, которая выполняет ту обработку фрагмента текста, которая определена в Вашем индивидуальном задании. При реализации функции запрещается пользоваться функциями библиотек языка C. Примечания: 1. Функция должна возвращать результат в любом случае. Например, необходимо предусмотреть работу функции при некорректном задании ее параметров, некорректном вводе данных и т.п. ... http://www.cyberforum.ru/cpp-beginners/thread420617.html
C++ массив
Объявить массив целых чисел и заполнить его случайными значениями. Размер массива и диапазон значений его элементов заданы в Вашем варианте индивидуального задания. В индивидуальных заданиях указано также, какую обработку массива следует произвести. Для всех вариантов задания следует иметь в виду следующее: 0 считается положительным числом, если в задании не оговорен какой-то другой его...
Массивы (исправить программу) C++
посмотрите, пожалуйста, прогу. вроде всё правильно, но только почему числа не меняются?? #include <stdio.h> #include <conio.h> #include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main(void) {
C++ Определить или в двумернам массиве есть одинаковые элементы. http://www.cyberforum.ru/cpp-beginners/thread420609.html
Помогите пожалуйсто :boredom: C++: Определить или в двумернам массиве есть одинаковые элементы.
C++ Последовательность положительных элементов в массиве Объявить массив целых чисел и заполнить его случайными значениями. Размер массива и диапазон значений его элементов заданы в Вашем варианте индивидуального задания. В индивидуальных заданиях указано также, какую обработку массива следует произвести. Для всех вариантов задания следует иметь в виду следующее: 0 считается положительным числом, если в задании не оговорен какой-то... подробнее

Показать сообщение отдельно
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
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 я уже и забыл, он у меня порписан в гуе опциях линкера.
 
Текущее время: 22:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru