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

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

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

Показать сообщение отдельно
alkagolik
Заблокирован
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru