1

Тема: Рядки. Подвоєння центральної букви в слові.

Вітаю. Буду вдячий за допомогу в такій задачі:

Потрібно вводити з клавіатури порядок слів, а программа в свою чергу повинна відшукати слова з непарною кількістю букв, та, якщо такі є, подвоїти середню, результат вивести на екран.

Ось мої думки, але як я підозрюю з безліччю помилок:

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<iostream>

using namespace std;

void main()
{
    setlocale (0,"");
    char str[100];
    gets(str);
    cout <<"Vvedit slova cherez probil:";
    gets(str);
    char res[100];
    char*p=strtok(str,"");
    while(p !='\0')
    {
        if (strlen(p)%2!=0)
        {
            strncat(res,p,strlen(p)/2+1);
            strncat(res,p+strlen(p)/2,1);
            strcat(res,p+strlen(p)/2+1);
        }
        p=strtok(NULL,"");
    }
    cout<<res;
    getch;
}

Буду дуже вдячний за допомогу.

2

Re: Рядки. Подвоєння центральної букви в слові.

Ви правильно підозрюєте.
Отже,
1. Визначіться із засобами. Або gets, або cin. Або puts, або printf, або cout. Або char [], або string.
Яка мета? Вивчити "з середини", як C++ працює з масивами, чи навчитися користуватися стандартними бібліотеками? Якщо друге - то бібліотеки C чи C++? Що менше різних засобів - то менше плутанини.
2. Нащо перший gets?
3. strtok(str,"") не робить нічого.
4. char*p=strtok(str,""); якщо виправити параметри функції встановить вказівник на перший елемент після розбиття, перше слово у вас викидається.
5. p !='\0' - нащо порівнювати вказівник із тим, на що він може вказувати? Може, малося на увазі
p != NULL ? Ні, це працює, але засадничо некоректно.
6. strlen(p) буде показувати довжину залишку рядку - з усіма словами, див. п. 4.