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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
#1

Вставить в строку s содержимое s1 начиная с позиции n - C++

14.07.2011, 13:55. Просмотров 3081. Ответов 25
Метки нет (Все метки)

Помогите пожалуйста написать программу!
Вставить в строку s содержимое s1 начиная с позиции n. То есть сначала идут n-первых символов s, тогда символы s1, а дальше-те символы, которые были у s до вставки s1, начиная с позиции n.
Это нужно сделать не используя библиотеки <string.h>, а создать собственную функцию Insert (s, s1, n) ...
Заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2011, 13:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вставить в строку s содержимое s1 начиная с позиции n (C++):

Вставить подстроку в строку, начиная с позиции n - C++
Надо вставить подстроку в строку, начиная с позиции n.

Вставка в строку другой строки, начиная с заданной позиции - C++
class String { protected: char*str;//Указатель на массив символов int size;//Длина строки int num;//Кол-во символов в строке ...

Реализовать вставку подстроки в строку, начиная с заданной пользователем позиции - C++
Доброго времени суток. Отстала по теме строки. Сижу читаю в инернете, но пока не удается написать полную программу. Помогите, пожалуйста,...

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

Вставить в строку 1 содержимое строки 2 (#C) <String.h> - C++
Задание: Нашёл тут у нас много полезностей, но не удалось собрать программу... Помогите. char * insertSTR(char *str1, char...

Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита - C++
Ввести целое A. Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с ервогоп бита. B=1A05h.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
14.07.2011, 13:57
  #2

Не по теме:

VolodiaVoz, Если не секрет, где учишься ?

0
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 14:05  [ТС] #3
Цитата Сообщение от asics Посмотреть сообщение

Не по теме:

VolodiaVoz, Если не секрет, где учишься ?

Не очень хорошо пишу на руском!
С++ не мой конек!
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.07.2011, 14:13 #4
читайте классику СЭэээр. http://msdn.microsoft.com и ничего писать не надо, ну а если уж сильно хочется, то:
C++
1
2
3
4
5
6
7
8
char * insertSTR(char *str1, char *str2, int n){
  int newSize = strlen(str1)+strlen(str2);
  char *newStr = new char[newSize];
  memset(newStr, '\0', newSize);
  strncpy(newStr, str1, n);
  strcat(newStr, str2);
  strcat(newStr, str1 + n);
}
ЗЫ: писал прям тут, не факт что скомпилиться

Добавлено через 2 минуты
+ нужно проверить, не больше ли число n строки str1 и т.д. и т.п., ну это думаю уже сами

Добавлено через 1 минуту
пардон, в конце нужно дописать return newStr;
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.07.2011, 14:23 #5
Мой вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <memory.h>
#include <string.h>
 
char*  insert(char* str, const char* spos, int pos) {
    int len = strlen(str);
    int cnt = strlen(spos);
    memmove(str + pos + cnt, str + pos, len + cnt);
    strncpy(str + pos, spos, cnt);
    return str;
}
 
 
int main(void)
{
   char str[32];
   strcpy(str, "subaru wrx.");
 
   puts( insert(str, "-impreza", 6) );
 
   getchar();
   return 0;
}
0
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 14:24  [ТС] #6
А как сделать собственную функцию Insert (s1, s2, p) - процедура вставки строки s1 в строку s2, начиная с позиции p.Наведемо пример действия процедуры вставки: Insert ('сон', 'л', 2), результатом будет - 'слон'. В твоем варианте мы использовали библиотеку <string.h> ее не нужно использовать!
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 14:30 #7
VolodiaVoz, разгадаешь загадку запостю решение:

"
перед тобой 3 ведра. в них есть 3 вида шаров: синие, красные и перемешанные (синие + красные).
ведра подписаны ("красные", "синие", "перемешанные"), но известно, что все они подписаны неверно.
не смотря в содержимое ведра ты можешь вытащить 1 шар из 1-го ведра. после этого ты должен сказать , что - где лежит. как это сделать?
"
1
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.07.2011, 14:47 #8
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
А как сделать собственную функцию Insert (s1, s2, p) - процедура вставки строки s1 в строку s2, начиная с позиции p.Наведемо пример действия процедуры вставки: Insert ('сон', 'л', 2), результатом будет - 'слон'. В твоем варианте мы использовали библиотеку <string.h> ее не нужно использовать!
ох ты ж ёжик.... ну если уж так сильно хочется, напиши так:
C++
1
2
3
4
5
6
7
8
9
10
11
char * myCrippleInsertChars(char * str1, int sizeStr1, char * str2, int sizeStr2, int polniyP){
   char * newStr = new char[sizeStr1 + sizeStr2];
   int newSizeIter = 0;
   for(int i = 0; i < polniyP; i++, newSizeIter++)
      newStr[newSizeIter] = str1[i];
   for(int i = 0; i < sizeStr2; i++, newSizeIter++)
      newStr[newSizeIter] = str2[i];
   for(int i = polniyP; i < sizeStr1; i++, newSizeIter++)
      newStr[newSizeIter] = str1[i];
   return newStr;
}
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.07.2011, 14:47 #9
Вот без string.h
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>
 
 
char*  insert(char* str, const char* spos, int pos) {
     char* tmp  = str;
     const char*  ps;
     int   len1, len2, cnt, i;
 
     for(len1 = 0, ps = spos; *ps; *ps++, len1++);
     for(len2 = 0, ps = str;  *ps; *ps++, len2++);
     cnt = len1;
     while(cnt--) {
         for(i = len2+len1; i >= pos; i--)
            *((str) + i + 1) = *((str)+ i);
     }
     str += pos;
     while(*spos)
        *str++ = *spos++;
     return tmp;
}
 
 
 
int main(int argc, char* argv[])
{
   char str[32] = { "hoe my." };
 
   puts( insert(str, "m", 2) );
 
   getchar();
   return 0;
}
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.07.2011, 14:47 #10
а вообще - это не правильное решение задачи, а правильное Вы получите, после отгадывания загадки)))
0
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.07.2011, 14:48 #11
ответ: вытащить из микса и сделать выводы по цвету шарика.
пости решение, а то мне тоже интересно как сделать
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.07.2011, 15:01 #12
Цитата Сообщение от OstapBender Посмотреть сообщение
VolodiaVoz, разгадаешь загадку запостю решение:

"
перед тобой 3 ведра. в них есть 3 вида шаров: синие, красные и перемешанные (синие + красные).
ведра подписаны ("красные", "синие", "перемешанные"), но известно, что все они подписаны неверно.
не смотря в содержимое ведра ты можешь вытащить 1 шар из 1-го ведра. после этого ты должен сказать , что - где лежит. как это сделать?
"
Имеем:
Код
  red    blue    mix
Берем из перемешанных, но т.к. все неверно, значит в этом ведре либо все синие, либо все красные:
1. Если попался красный, тогда
Код
  blue    mix    red
2. Попался синий -
Код
   mix    red    blue
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 15:09 #13
co6ak,
Net_Wanderer,
)) ну да верно

вытащить шарик из микса. допустим он красный - значит в миксе красные.
т.к в синем ведре могли бы быть только красные или микс, но красные уже в миксе - в синем микс.
в красном - синие.

задачка кстати с реального собеседования)
да и простая она довольно.
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
14.07.2011, 15:31 #14
таки ещё вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void Insert(char* a, char* b, size_t n){
    char res[512], *p=res, *a1=a;
    do{
        if(p-res==n){
            for(; *p=*b; ++p, ++b);
        }
    }while(*p++=*a++);
    for(p=res; *a1=*p; ++a1, ++p);
}
 
int main (){
    char a[512]="aaaaa", *b="bbbb";
    size_t n=2;
    Insert(a, b, n);
    puts(a);
    return 0;
}
0
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 17:07  [ТС] #15
Цитата Сообщение от co6ak Посмотреть сообщение
ответ: вытащить из микса и сделать выводы по цвету шарика.
пости решение, а то мне тоже интересно как сделать
Но мы не знаем где есть mix ведра подписаны не правильно!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 17:07
Привет! Вот еще темы с ответами:

Заменить в числе a v битов, начиная с n-й позиции - C++
Добрый вечер, уважаемые форумчане, подскажите пожалуйста решение сей задачи Заменить в числе a v битов, начиная с n-й позиции, на n...

Установка L символов строки s в значение t, начиная с позиции n - C++
Установка L символов строки s в значение t, начиная с позиции n. Функция StrSet (s, n, L, t). Не использовать библиотеку &lt;string.h&gt; это...

Установка l символов строке s, начиная с позиции n, в значение t - C++
Функція StrSet(s,n,l,t) Призначення: установлення l символів рядку s, починаючи с позиції n, в значение t. Розробити два варіанти...

Как в файле удалить n байт, начиная с заданной позиции - C++
Вопрос: как в файле удалить n байт начиная с заданной позиции? (файловый ввод-вывод в стиле C++)


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2011, 17:07
Закрытая тема Создать тему
Опции темы

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