Тема: Очищення масиву символів

В мене виникла така проблема я ніяк не можу очистити масив символів arrstr, я пробував ось так arrstr[0]='/0'; і так strcpy(arrstr,""); але там залишається "сміття". Як мені його очистити ?
Завдання.
Організувати ввід рядка, кожне слово в рядку відділяється від інших слів пробілами, їх може бути необмежена кількість. Знайти найкоротше слово в рядку.

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char arr[1000]="";
    char arrstr[100]="";
    char str[100]="";
    cout << "Vvedit rechna ->";
    cin.getline(arr, 1000);
    arr[strlen(arr)] = ' ';
    int k = 0, pamuat = 100;
    for (int i = 0; i < strlen(arr); i++)
        if (arr[i] != ' ')
            arrstr[k++] = arr[i];
        else
        {
            if (pamuat > k)
                pamuat = k, strcpy(str, arrstr);
            arrstr[0]='/0';
            k = 0;
        }
    cout << str;
    getch();
    return 0;
}

2

Re: Очищення масиву символів

'/0' - взагалі компілюватися не повинно, не плутайте з '\0'.
А вам треба не весь рядок чистити, а стежити, щоб наприкінці всіх рядків був цей самий нулик перед тим, як працювати із ними:

arr[strlen(arr)+1] = '\0';
arr[strlen(arr)] = ' ';//а то нулик затеремо
...
if (pamuat > k)
{
  pamuat = k;
  arrstr[ k ] = '\0';
  strcpy(str, arrstr);
}
Подякували: Betterthanyou1

3

Re: Очищення масиву символів

1. arr[strlen(arr)] = ' '; - змінюєте термінальний нуль масиву на пробіл
2. arrstr[0]='/0'; - хіба тут не два символи замість одного? можливо ви мали на увазі '\0', але й він сюди не підходить і взагали ви тут чистите тільки перший символ масиву
3. можливо можна виділити якийсь "недрукований" симвом як символ очищення і чистити ним масив
4. дивний алгоритм

4

Re: Очищення масиву символів

koala написав:

'/0' - взагалі компілюватися не повинно, не плутайте з '\0'.

також стало цікаво, спробував, компілюється але з варнінгом  - overflow in implicit constant conversion

5

Re: Очищення масиву символів

В мене чогось компілює '/0' хоч це два символи
Я виправив на '\0' щось я не уважний, але проблема такі залишилась якщо ввести "getch cin" то я отримав  "cinch" а не "cin"

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char arr[1000]="";
    char arrstr[100]="";
    char str[100]="";
    cout << "Vvedit rechna ->";
    cin.getline(arr, 1000);
        arr[strlen(arr) + 1] = '\0';    
        arr[strlen(arr)] = ' ';
    int k = 0, pamuat = 100;
    for (int i = 0; i < strlen(arr); i++)
        if (arr[i] != ' ')
            arrstr[k++] = arr[i];
        else
        {
            if (pamuat > k)
                pamuat = k, strcpy(str, arrstr);
            arrstr[0] = '\0';
            k = 0;
        }
    cout << str;
    getch();
    return 0;
}

6 Востаннє редагувалося Arete (30.10.2014 21:21:38)

Re: Очищення масиву символів

Виходите за межі масиву

arr[strlen(arr) + 1] = '\0';  

Подивіться на блок if’а який написав koala. Ви копіюєте лишнє, оскільки перед викликом strcpy не поставили термінальний нуль в масиві arrstr.

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

7

Re: Очищення масиву символів

Betterthanyou написав:

Я виправив на '\0' щось я не уважний, але проблема такі залишилась

А ви пробували читати не половину повідомлення, а повністю?
У мене взагалі останнім часом таке враження, що половину тексту я пишу чи то китайською, чи то прозорими літерами - ставлю людині 4 питання по її коду, отримую дві відповіді і т.д.

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

8 Востаннє редагувалося Joker (30.10.2014 22:04:22)

Re: Очищення масиву символів

Я виправив на '\0' щось я не уважний, але проблема такі залишилась

Якщо я правильно розумію, то '\0' символ означає кінець рядка. І після нього вже нічого. А вам потрібно просто замінити зайвий символ(той що ви хочете видалити) на пробіл ' '.

P.S. і пам'ятай про:
1) звертатися до останього елементу масиву треба a[size-1];
2) '\0' також потребує місця у вашому масиві

p.s.s. вибачте, якщо я щось не те сказав (таке останім часом занадто часто трапляється, чомусь)

9 Востаннє редагувалося Betterthanyou (30.10.2014 22:27:04)

Re: Очищення масиву символів

koala Дякую, вже все робить
JokerВи не правильно зрозуміли, мені потрібно було повністю очистити масив символів щоб згодом записати в нього нову інформацію. 1) звертатися до останього елементу масиву треба a[size-1]; я звертаюсь так arr[strlen(arr)-1] до останнього елементу якщо мені потрібно до нього звернутися

10

Re: Очищення масиву символів

JokerВи не правильно зрозуміли, мені потрібно було повністю очистити масив символів щоб згодом записати в нього нову інформацію. 1) звертатися до останього елементу масиву треба a[size-1]; я звертаюсь так arr[strlen(arr)-1] до останнього елементу якщо мені потрібно до нього звернутися

Вибачте

11

Re: Очищення масиву символів

Joker написав:

JokerВи не правильно зрозуміли, мені потрібно було повністю очистити масив символів щоб згодом записати в нього нову інформацію. 1) звертатися до останього елементу масиву треба a[size-1]; я звертаюсь так arr[strlen(arr)-1] до останнього елементу якщо мені потрібно до нього звернутися

Вибачте

Нема за що вибачаться