1

Тема: замінити всі пробіли на знак табуляціїї.

Написати функцію ,яка заміняє всі пробіли на знак табуляціїї.
не можу зрозуміти що не так в коді ?

#include <iostream>
using namespace std;

char Zamina(char *str)
{
    for(int i = 0; ; i++)
    {
        if(str[i] != '\0')
            return '\t';
        else
            return 0;
    }
}
void main()
{
    char str[100];
    for(int i = 0; ; i++)
    {
        cout << "Vvedit probil-->";
        cin.getline(str, 100);
        if(str[i] == ' ') {
            int length = Zamina(str);
            cout << "Tabylacia" << length << endl;
        }
        else
            cout << "Ne virne vvedenya" << endl;
    }
}

2

Re: замінити всі пробіли на знак табуляціїї.

Я взагалі погано розумію, що ви намагаєтеся робити. Нащо в main цикл взагалі потрібен? І що вам дає порівняння в ньому?

mary_piku написав:

Написати функцію ,яка заміняє всі пробіли на знак табуляціїї.

ну ок

void Zamina(char *str)//Написати функцію, яка
{
    for (int i = 0; str[i] != '\0'; i++)//всі 
    {
        if(str[i] == ' ') { //пробіли
            str[i] = '\t'; //замінює на знак табуляції 
        }
    }
}

Нащо цій функції повертати один символ? І нащо взагалі їй щось повертати, якщо вона змінює те, що їй передали? Хіба що можна повертати свій параметр, для зручності. А можна і без цього.
А тепер скажіть - що саме в коментарях не відповідає коду? А коментарі, якщо звернете увагу, це просто ваша задача. Це так складно?

Подякували: leofun011

3

Re: замінити всі пробіли на знак табуляціїї.

а в головній функції що , там помилку показує ?

4

Re: замінити всі пробіли на знак табуляціїї.

mary_piku написав:

а в головній функції що , там помилку показує ?

Це ви нас питаєте?
Якщо ваш компілятор виводить повідомлення про помилку і ви не розумієте, чому - напишіть про це нам. Пишіть конкретно: на якому коді, в якому рядку, яке повідомлення, ну і що ви про це думаєте.

5

Re: замінити всі пробіли на знак табуляціїї.

ну ,якщо ви програми не запускали тоді я вам скажу,якщо залишити без змін то в рядку 23, де int length = Zamina(str); то Zamina(str) підкреслює.

6

Re: замінити всі пробіли на знак табуляціїї.

А, то у вас все компілюється, але підкреслює? То ігноруйте, це просто значки на екрані. От якщо не компілюється, чи компілюється, але робить не те, що треба, тоді є про що говорити.

7

Re: замінити всі пробіли на знак табуляціїї.

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

8

Re: замінити всі пробіли на знак табуляціїї.

mary_piku написав:

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

Якщо підкреслює, але компілюється без зауважень, то підкреслення - це просто помилка середовища розробки. Іноді буває. Чи все ж зауваження (попередження, warnings) є?
А якщо програма "робить не те, що треба", то перепишіть її так, щоб робила те, що треба, все просто. От якщо вам щось конкретне треба - тоді може бути розмова. Чи ви маєте на увазі, що ми маємо проробити всю ту роботу, яку ви вже зробили, щоб отримати той самий результат, який ви вже маєте (а це не факт, що на інших комп'ютерах буде саме той результат, компілятори, їхні налаштування і баги бувають різні), і це все лише тому, що вам ліньки написати про свій результат? Економите натискання на клавіатурі? Тоді чому ви очікуєте, що іншим не буде ліньки це все робити?

9

Re: замінити всі пробіли на знак табуляціїї.

якщо б я могла б це зробити я б сюди не писала щоб допомогли , якщо не хочете допомагати то не коментуйте.

10

Re: замінити всі пробіли на знак табуляціїї.

Тобто ви не можете сказати, чим поведінка вашої програми відрізняється від бажаної.
Ну ок.

11

Re: замінити всі пробіли на знак табуляціїї.

якщо вас цікавлять помилки то там зазначено cannot convert from void to int.
мені здається що я зрозуміло написала , що вона робить не те що треба .

12

Re: замінити всі пробіли на знак табуляціїї.

#include <iostream>

char *const replaceAll(char *const str, char const oldValue, char const newValue)
{
    for(char *s(str); *s; ++s)
        if(*s == oldValue)
            *s = newValue;
    return str;
}

using namespace std;

void main()
{
    char str[100];
    cout << "Input string : ";
    cin.getline(str, 100);

    cout << "Output string : " << replaceAll(str, ' ', '\t') << endl;
}

Скомпільовано з використанням MSVC v12.0 :

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe" Replace.cpp /AI "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib" /I "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" /EHsc /link /libpath:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib" /libpath:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib"

Кращий варіант :

#include <iostream>

char *const replaceAll(char *const str, char const oldValue, char const newValue)
{
    for(char *s(str); *s; ++s)
        if(*s == oldValue)
            *s = newValue;
    return str;
}

using namespace std;

int main(int argc, char *argv[])
{
    if(argc > 1) {
        char *str = argv[1];
        cout << "Input string : " << str << endl;

        cout << "Output string : " << replaceAll(str, ' ', '\t') << endl;
    }
    else
        cout << "Start program with parameter. Example :" << endl
            << (argc > 0 ? *argv : "program.exe") << " \"abc def ghi\"";
    return 0;
}
Подякували: mary_piku2

13

Re: замінити всі пробіли на знак табуляціїї.

mary_piku написав:

якщо вас цікавлять помилки то там зазначено cannot convert from void to int.

Ну так а нащо ви намагаєтеся значення функції записувати в length? В умові нічого не сказано, що щось має повертатися з функції. Просто видаліть int length =:

Zamina(str);
cout << "Tabylacia" << str<< endl;
mary_piku написав:

мені здається що я зрозуміло написала , що вона робить не те що треба .

Бо ви знаєте, що саме, а ми - ні. Тому це зрозуміло тільки вам.

Подякували: leofun011

14

Re: замінити всі пробіли на знак табуляціїї.

[offtop]
без пана дадаїста такі теми дуже депресивні та гнітючі
[/offtop]

Подякували: /KIT\1

15

Re: замінити всі пробіли на знак табуляціїї.

cheappi386 написав:

[offtop]
без пана дадаїста такі теми дуже депресивні та гнітючі
[/offtop]

А я все сподіваюсь, що турботу про студентів візьме на себе пан Alchimic...

16

Re: замінити всі пробіли на знак табуляціїї.

P.Y. написав:
cheappi386 написав:

[offtop]
без пана дадаїста такі теми дуже депресивні та гнітючі
[/offtop]

А я все сподіваюсь, що турботу про студентів візьме на себе пан Alchimic...

нейросеть обучат. майнит биткони. паті на ібіца. +33см.

17

Re: замінити всі пробіли на знак табуляціїї.

По темі. Мені здається незовсім зрозумілою постановка задачі з практичної точки зору. Якщо тупо замінити кожен пробіл на табуляцію — ну, це просто, але особливого сенсу в цьому нема (просто збільшити відстань між словами? А в чому сенс — просто щоб студенти потренувались замінювати один символ на інший?). Або ж замінити пробіли на табуляції, де це можливо, але так, щоб форматування тексту не поїхало — тоді групи пробілів замінюються на табуляції (при цьому враховується й довжина табуляції, що в консолі зазвичай дорівнює 8, але в багатьох текстових редакторах її можна задавати довільно), але при цьому замінюються лише групи пробілів, що стоять перед позиціями, кратними довжині табуляції, в решті випадків їх слід лишити незмінними. Або ж малась на увазі зворотня задача — перетворити всі табуляції на пробіли (з урахуванням довжини табуляції і збереженням форматування)?

18

Re: замінити всі пробіли на знак табуляціїї.

P.Y. написав:

просто щоб студенти потренувались замінювати один символ на інший?

А не очевидно, що це саме так?

19

Re: замінити всі пробіли на знак табуляціїї.

koala написав:
P.Y. написав:

просто щоб студенти потренувались замінювати один символ на інший?

А не очевидно, що це саме так?

Добре, а чому тоді саме пробіл на табуляцію, а не, наприклад, крапку на знак оклику чи пробіл на '\n'? Табуляція тим і цікава, що відображається як декілька пробілів (кількість яких залежить від позиції) — просто жаль таку цікаву задачу зводити до банальної заміни символа.

20

Re: замінити всі пробіли на знак табуляціїї.

P.Y. написав:
koala написав:
P.Y. написав:

просто щоб студенти потренувались замінювати один символ на інший?

А не очевидно, що це саме так?

Добре, а чому тоді саме пробіл на табуляцію, а не, наприклад, крапку на знак оклику чи пробіл на '\n'? Табуляція тим і цікава, що відображається як декілька пробілів (кількість яких залежить від позиції) — просто жаль таку цікаву задачу зводити до банальної заміни символа.

Тут людина не розуміє, в чому помилка, коли намагається отримати значення від функції, що повертає void. А ви ще й цікаву задачу їй хочете дати.

Подякували: leofun011