grizzz
(griz zirg)
29.Май.2020 17:40:08
#1
Добавление слова “hello” после первого слова введенной строки.Прошу подсобить с кодом.Вот мой набросок.
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
char s[100];
char s1[] = "hello";
cout << "Введите строку:";
gets_s(s);
//strcpy_s(s1, s);
//strcat_s(s, s1);
for (int i = 0; i <= strlen(s); i++)
if (s[i] == ' ')
strcat_s(s, s1);
puts(s);
system("pause");
}
AlexP
(Alex P.)
29.Май.2020 17:49:47
#2
grizzz:
strcat_s(s, s1)
Если strcat_s
, то еще размер передать вторым параметром (чтобы не было переполнения буфера если строка длиннее).
Например, как тут внизу: https://en.cppreference.com/w/c/string/byte/strcat
1 лайк
AlexP
(Alex P.)
29.Май.2020 17:54:45
#4
Да, надо-то С или С++?
Чот тут cout
от С++, а строки из С )
Если можно С++, то проще std::string как выше.
Если С, то надо самому создать новую строку соединив то, что до, “hello”, и то, что после.
grizzz
(griz zirg)
29.Май.2020 17:56:03
#5
с++, но мне нужно именно поработать с char, но у меня не получается поместить слово именно после первого слова строки
А после какого слова получается?
grizzz
(griz zirg)
29.Май.2020 18:02:41
#7
Допустим, я ввожу произвольную строку (Hey man) и после первого слова этой строки мне нужно поместить слово “hello”.Должно получиться(Hey hello man).
grizzz
(griz zirg)
29.Май.2020 18:10:29
#9
А вот каким именно образом это реализовать у меня не хватает ума
AlexP
(Alex P.)
29.Май.2020 18:22:02
#10
В новую пустую (с нулями) строку
strncpy до индекса конца слова
strcat hello
strcpy после индекса
В последнем надо передавать что-то типа s + i
, чтоб начинать копировать после символа с номером i
.
https://www.codingame.com/playgrounds/14213/how-to-play-with-strings-in-c/string-copy
2 лайка
Классный сайт. Я, который не различает С от С++, пролистав несколько страниц, собрал из предоставленных примеров следующее.
#include <stdio.h>
#include <string.h>
#define DEST_SIZE 40
int main()
{
char str[] = "strtok needs to be called several times to split a string";
//int init_size = strlen(str);
char delim[] = " ";
char insert_word[] = "rocks";
char dest[DEST_SIZE] = "";
char *ptr = strtok(str, delim);
int i = 0;
while(ptr != NULL)
{
strcat(strcat(dest, ptr)," ");
if(i == 0)
{
strcat(strcat(dest, insert_word)," ");
i++;
}
ptr = strtok(NULL, delim);
}
printf(dest);
printf("\n");
return 0;
}
1 лайк
grizzz
(griz zirg)
29.Май.2020 20:09:11
#12
Ничего путного, как всегда, не получилось.
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
char s[100], str[100], str1[100];
char s1[] = "hello";
cout << "Введите строку:";
gets_s(s);
strcpy_s(str, s);
for (int i = 0; i <= strlen(str); i++)
if (str[i] == ' ')
str[i] = '\0';
//puts(str);
strcat_s(str, s1); // добавили вставляемое слово
strcat_s(str, s); // нужно добавить остаток строки
strcpy_s(s, str);
puts(s);
system("pause");
}
AlexP
(Alex P.)
29.Май.2020 20:44:14
#13
grizzz:
strcat_s(str, s1);
я ж говорю
Тут что-то очень странное.
Надо найти первый пробел (еще, кстати, вероятно надо не забыть хотя бы про возможность строки с одним словом без пробелов), сделать что надо, и выйти из цикла (break
, …)
1 лайк
LiAN
30.Май.2020 08:33:16
#14
grizzz
(griz zirg)
30.Май.2020 08:39:33
#15
я и пытаюсь, но никак не получается
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
char s[100], str[100], str1[100];
char s1[] = " hello ";
cout << "Введите строку:";
gets_s(s);
strcpy_s(str, s);
strcpy_s(str1, s);
for (int i = 0; i <= strlen(str); i++)
if (str[i] == ' ')
{
str[i] = '\0';
//strcpy_s(str,str1);
break;
}
//puts(str);
//puts(str1);
//strcpy_s(str1, str);
int L = str - str1;
strncat_s(str, s1, 7); // добавили вставляемое слово
strcat_s(str, s+L); // нужно добавить остаток строки
strcpy_s(s, str);
puts(s);
system("pause");
}
LiAN
30.Май.2020 08:49:27
#16
Цикл уберите и сложите введенную строку с заготовкой.
grizzz
(griz zirg)
30.Май.2020 08:51:44
#17
Так мне нужно добавить заготовку после первого слова, а после этой операции добавить остаток строки, а цикл нужен, чтобы отделить первое слово от остальной части
AlexP
(Alex P.)
30.Май.2020 09:19:58
#18
Так и зачем вы обрезаете строку после первого слова?
Делайте так:
1 лайк
AlexP
(Alex P.)
30.Май.2020 09:37:38
#19
Точнее чтобы не запутаться и упростить отладку, проще скопировать эти две части в отдельные строки и потом в строку результата
char result[100] = { 0 };
char before[100] = { 0 };
char after[100] = { 0 };
...
strcat_s(result, before);
strcat_s(result, "hello");
strcat_s(result, after);
О, оказывается в С++ (мб только в VS?) там теперь есть перегрузка , которая сама определяет размер если просто передать статический массив. Но если передавать просто указатель, result + 10
и т.п., то все еще надо самому указывать макс. размер.
LiAN
30.Май.2020 09:41:02
#20
Вот как-то так получилось, без циклов:
#cpp
#include <iostream>
#include <cstring>
#include <cstdlib>
int main(int argc, char* argv[])
{
std::string str = "Pupkov, Hello! !!! !!!";
std::cout << str << std::endl;
size_t pos = str.find_first_of(' '); // указываем символ позицию
str.insert(pos + 1, "a good programmer on the C++!!! ");
std::cout << str << std::endl;
std::cout << "Bye Bye" << std::endl;
system("pause");
return 0;
}