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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
boyfromsun
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 13
#1

Вставить в строку 1 содержимое строки 2 (#C) <String.h> - C++

16.05.2012, 18:44. Просмотров 2268. Ответов 24
Метки нет (Все метки)

Задание:
Ввести две символьных строки. Выполнить вставку второй строки в первую, с позиции, введенной с клавиатуры.

Нашёл тут у нас много полезностей, но не удалось собрать программу... Помогите.

C++
1
2
3
4
5
6
7
8
9
10
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);
}
return newStr;
Я решил эту задару без помощи библиотеки <string>

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
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>                      /*Подклячение стандартной библиотеки ввода-вывода*/
#include <string.h>                     /*Подключение библиотеки работы со строками*/
 
int main(void)                          /*Вход в программу*/
{
int a, b, n, i, k, kolsim1, kolsim2;    /*Иницилизация данныйх*/
char str1[80];                          /*Иницилизация данныйх*/
char str2[80];                          /*Иницилизация данныйх*/
char buf[160];                          /*Иницилизация данныйх*/
printf ("Vvedite pervuy stroku \n");    /*Вывод строки на экран*/ 
scanf("%s", str1);                      /*Ввод символов с клавиатуры в память*/
printf ("Vvedite vtoruy stroku \n");    /*Вывод строки на экран*/
scanf("%s", str2);                      /*Ввод символов с клавиатуры в память*/
kolsim1=strlen(str1);                   /*Получение количества символов в строке*/
kolsim2=strlen(str2);                   /*Получение количества символов в строке*/
a=kolsim1+kolsim2;                      /*Получение количества всех введенных символов*/
b=-1;                                   /*Присваивание значения переменной, для правильного*/
                                        /*формирования счетчика*/
printf ("Vvedite pozitciu n: \n");      /*Вывод строки на экран*/
scanf("%0d", &n);                       /*Ввод символов с клавиатуры в память*/
if (n<=kolsim1)                         /*Проверка правильности введенных данных*/
    {
    for(i=0;i<n;i++)                    /*Цикл заполнения буферного массива элементами, из первой*/
        {                               /*строки*/
        b=b+1;                          /*Увеличение счетчика*/
        buf[b]=str1[i];                 /*Присваивание значения элемента буферного массива элементом*/
        }                               /*из первой строки*/
    for(k=0;k<kolsim2;k++)              /*Цикл заполнения буферного массива элементами из второй*/
        {                               /*строки. Начиная с позиции n.*/
        b=b+1;                          /*Увеличение счетчика*/
        buf[b]=str2[k];                 /*Присваивание значения элемента буферного массива элементом*/
        }                               /*из первой строки*/
    for(;i<kolsim1;i++)                 /*Цикл продолжения замиси элементов из первго массива в бу-*/
        {                               /*ферный массив*/
        b=b+1;                          /*Увеличение счетчика*/
        buf[b]=str1[i];                 /*Присваивание значения элемента буферного массива элементом*/
        }                               /*из первой строки*/
    buf[b+1]='\0';                      /*Запись NULL-терминатора, для верного вывода на экран*/
    printf ("Poluh'ennaja stroka %s\n", buf);   /*Вывод полученной строки*/
    return 0;                           /*Завершение программы*/
    }
else                                    /*Обработка неверных введенных данных*/
    {
    printf ("!!! Oshibka n !!!\n");     /*Вывод строки на экран*/
    return 0;                           /*Завершение программы*/
    }
}

Нужно решить при помощи библиотеки STRING и как можно короче. Жду вашех предложений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 18:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вставить в строку 1 содержимое строки 2 (#C) <String.h> (C++):

Вставить в строку s содержимое s1 начиная с позиции n - C++
Помогите пожалуйста написать программу! Вставить в строку s содержимое s1 начиная с позиции n. То есть сначала идут n-первых символов s,...

std::string variable.data() обрезает содержимое строки - C++
Всем доброй ночи // read a file into memory #include &lt;iostream&gt; // std::cout #include &lt;fstream&gt; // std::ifstream ...

Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0 - C++
Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0. Помогите пожалуйста с реализацией на Си

Какая функция копирует содержимое строки f в строку t? - C++
Какая функция копирует содержимое строки f в строку t?

Строки: как вставить пробел в строку - C++
Привет все отзывчивым смотрите 16 строчку) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { ...

Как вставить слово в строку или удалить из строки? - C++
Здравствуйте! Спрашиваю, так как не мог найти утвердительного ответа в поиске. Как вставить слово в строку или удалить из строки? То есть...

24
Alex_Konkov
51 / 11 / 2
Регистрация: 11.05.2012
Сообщений: 21
16.05.2012, 19:03 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
 
int main()
{
    string s1,s2;
    int x;
    cin>>s1>>s2;
    cout<<"nomer posicii: ";cin>>x;
    s1=s1.insert(x,s2);
    cout<<s1;
_getch();
return 0;
}
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
16.05.2012, 19:04 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
 
int main() {
    std::string first;
    std::string second;
    std::string::size_type position;    
    
    std::cout << "first? ";
    std::cin >> first;
    std::cout << "second? ";
    std::cin >> second;
    std::cout << "position? ";
    std::cin >> position;
    
    first.insert(position, second);
    
    std::cout << "first: " << first << std::endl;
    std::cout << "second: " << second << std::endl;
}
1
boyfromsun
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 13
16.05.2012, 19:28  [ТС] #4
Alex_Konkov,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream.h>                // тут поставил .h
#include <conio.h>
#include <string.h>                    // тут поставил .h
using namespace_std                 // выдаёт ошибку где стоит "_" (я поставил для пометки ошибки)
 
int main()
{
    string s1,s2;                        // тут на запятой ошибку светит
    int x;
    cin>>s1>>s2;                      // здесь на 3м знаке ">", и после ";"
    cout<<"nomer posicii: ";cin>>x;
    s1=s1.insert(x,s2);
    cout<<s1;
 getch();                               //тут убрал _
return 0;
}
Подскажите, может сможите подправить мою программу ??? И был бы рад чтоб доделали свою.
Моя: ( не короткая но библиотекой string написана)
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
38
#include <stdio.h>
#include <memory.h>
#include <string.h>
 
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);
  return newStr;
}
int main(void)
{
  int n, kolsim1;
  char str1[80];
  char str2[80];
  printf ("Vvedite pervuy stroku \n");
  scanf("%s", str1);
  printf ("Vvedite vtoruy stroku \n");
  scanf("%s", str2);
  kolsim1=strlen(str1);
  printf ("Vvedite pozitciu n: \n");
  scanf("%d", &n);
  if (n<=kolsim1)
  {
    for                                                         
    printf ("Poluh'ennaja stroka %s\n", newStr);           //* СВЕТИТ ОШИБКУ ПЕРЕД  printf *//
    return 0;                                                         //*  не знаю что написать в for *//
  }
  else
{
 printf ("!!! Oshibka n !!!\n");
 return 0;
 }
}
Добавлено через 3 минуты
gray_fox, Извините в вашей программе совсем ничего не понят ? Она хоть на с ? или хоть на с++ ??
0
Alex_Konkov
51 / 11 / 2
Регистрация: 11.05.2012
Сообщений: 21
16.05.2012, 19:29 #5
моя не работает?
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
16.05.2012, 19:31 #6
Цитата Сообщение от boyfromsun Посмотреть сообщение
Она хоть на с ? или хоть на с++ ??
))) С++

Добавлено через 1 минуту
Если надо на С, то для этого есть другой раздел.
1
Alex_Konkov
51 / 11 / 2
Регистрация: 11.05.2012
Сообщений: 21
16.05.2012, 19:35 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s1,s2;
    int x;
    cin>>s1>>s2;
    cout<<"nomer posicii: ";cin>>x;
    s1=s1.insert(x,s2);
    cout<<s1;
return 0;
}
1
boyfromsun
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 13
16.05.2012, 19:36  [ТС] #8
Alex_Konkov,
gray_fox,
Я пользуюсь программами "Turbo C++ IDE" и "Borland C++ for DOS"

В программировании не силён... Делаю задачи по книжкам и при помощи интернета... И не сильно разбираюсь в программах... Вроде же написано С++ Но если я не прав, бога ради простите... Нужно сделать работу... Первый раз делал недели 3 эту задачу и сделал без библиотеки string, преподаватель сказал допустит к экзамену если перепишу её и напишу при использовании функций библиотеки string... Экзамен завтра, ну можно будет сдать после завтра... А как хочется остаться без хвостов..
0
Alex_Konkov
51 / 11 / 2
Регистрация: 11.05.2012
Сообщений: 21
16.05.2012, 19:43 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s1;
    string s2;
    int x;
    cout<<"1 stroka: ";cin>>s1;
    cout<<"2 stroka: ";cin>>s2;
    cout<<"nomer posicii: ";cin>>x;
    s1=s1.insert(x,s2);
    cout<<s1;
return 0;
}
Добавлено через 26 секунд
спрашивай если не работает

Добавлено через 3 минуты
проверил?
1
boyfromsun
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 13
16.05.2012, 19:49  [ТС] #10
Alex_Konkov, Наверно всё таки на языке #C нужно а то что у меня на программах написано "Turbo C++ IDE" и "Borland C++ for DOS" то это просто написано и это наверно не C++.... Потому что не работает... И у этих программ библиотека стринг пишется так #include <string.h>...

Если я вас взбаламутил простите...
Вот ссылка на то чем работаю http://narod.ru/disk/49463689001.1ee...o%20C.zip.html
0
Alex_Konkov
51 / 11 / 2
Регистрация: 11.05.2012
Сообщений: 21
16.05.2012, 19:56 #11
не в этом суть, скопируй ошибки посмотреть

Добавлено через 3 минуты
скопируй ошибки посмотреть и дело не в компиляторах, там различия минимальны
1
boyfromsun
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 13
16.05.2012, 20:02  [ТС] #12
Alex_Konkov, Расскажите как сразу все ошибки скопировать ???
А то я как дурак скриншотов наделал:
http://saveimg.ru/show-image.php?id=273e44514748f75d5da74be915d28e94
http://saveimg.ru/show-image.php?id=011bdde5e325fbc1ba51af6da64f120e
http://saveimg.ru/show-image.php?id=4d72bd7846e3db226a9139d2c08ccdba
http://saveimg.ru/show-image.php?id=92f4e2fe22bd45bac2e910ffc7c96329

П,С, я выше кинул ссылку на программу. Весит 3 м.б. Ставится 3 сек. Может попробуете?

Спасибо. Что пытаетесь помочь.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
16.05.2012, 20:11 #13
Цитата Сообщение от boyfromsun Посмотреть сообщение
Я пользуюсь программами "Turbo C++ IDE" и "Borland C++ for DOS"
Откуда я знаю, чем вы пользуетесь) Тем более, это ни на что не должно влиять (ну, в теории))) ).
Так попробуй:
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>    /* ведь этот string имелся ввиду, да? */ 
 
 
#define STR_MAX_LENGTH 256
 
 
int main() {
    char first[STR_MAX_LENGTH];
    char second[STR_MAX_LENGTH];
    char result[STR_MAX_LENGTH];
    int position;
    
    printf("first? ");
    scanf("%s", first);
    printf("second? ");
    scanf("%s", second);
    printf("position? ");
    scanf("%d", &position);
    
    strncpy(result, first, position);
    strcpy(result + position, second);
    strcat(result, first + position);
    
    printf("result: %s\n", result);
    
    return EXIT_SUCCESS;
}
Вообще это код на С, но, видимо, то, что тебе нужно.
1
boyfromsun
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 13
16.05.2012, 20:19  [ТС] #14
Цитата Сообщение от gray_fox Посмотреть сообщение
Откуда я знаю, чем вы пользуетесь) Тем более, это ни на что не должно влиять (ну, в теории))) ).
Так попробуй:
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
#define STR_MAX_LENGTH 256
 
 
int main() {
    char first[STR_MAX_LENGTH];
    char second[STR_MAX_LENGTH];
    char result[STR_MAX_LENGTH];
    int position;
    
    printf("first? ");
    scanf("%s", first);
    printf("second? ");
    scanf("%s", second);
    printf("position? ");
    scanf("%d", &position);
    
    strncpy(result, first, position);
    strcpy(result + position, second);
    strcat(result, first + position);
    
    printf("result: %s\n", result);
    
    return EXIT_SUCCESS;
}
Вообще это код на С, но видимо, то, что тебе нужно.
Эта программа заработала, но спрашивает First ? (я так понимаю первая строка) ввожу допустим 123
Спрашивает second ? (ну видимо 2 строка ) ввожу 5 и потом спрашивает position ( ну это куда в 1. строку вставлять 2ю строку ) нажимаю 1 к примеру. И ничего не выдаёт... А должно выдать 1523 , 5 2я строка вставленная в 1ю

Добавлено через 1 минуту
Но скажу вам, прогресс на лицо, огромное спасибо Надеюсь доделаем
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
16.05.2012, 20:28 #15
Эта программа заработала, но спрашивает First ? (я так понимаю первая строка) ввожу допустим 123
Спрашивает second ? (ну видимо 2 строка ) ввожу 5 и потом спрашивает position ( ну это куда в 1. строку вставлять 2ю строку ) нажимаю 1 к примеру. И ничего не выдаёт... А должно выдать 1523 , 5 2я строка вставленная в 1ю
Хм...
1
Миниатюры
Вставить в строку 1 содержимое строки 2 (#C) <String.h>  
16.05.2012, 20:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2012, 20:28
Привет! Вот еще темы с ответами:

Ошибка при посимвольной записи из строки char в строку string - C++
Это фрагмент конструктора класса: ifstream fin(&quot;client.txt&quot;); const int n = 80; char buf; fin.getline(buf,...

Скопировать с конца строки std::string четыре символа в другую строку - C++
как функцией можно скопировать с конца строки 4 символа в другую? string a = &quot;123456&quot;; string b; результат: b =...

Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0 - C++
Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0.

После первой строки, содержащей минимальный элемент, вставить строку из нулей - C++
Дан двумерный массив А (n * m) После первой строки содержащей минимальный элемент вставить строку из нулевых элементов


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

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

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