Не удалось преобразовать строку в массив символов

Я пытаюсь преобразовать строку с пробелами в массив символов без пробелов.

Вот что я пробовал

string str;
cout << "Enter a string: ";
getline(cin, str);
int TempNumOne=str.size();
char Filename[100];
for (int a=0;a<=TempNumOne;a++)
{
cout<<str[a]<<endl;
if(str[a]!=' ')
Filename[a]=str[a];
}

cout<<Filename;

Вывод выглядит так

Enter a string: hello world
h
e
l
l
o

w
o
r
l
d

hello

Только hello хранится. Почему это происходит и как мне это решить?

1

Решение

Это потому что:

  if(str[a]!=' ')
Filename[a]=str[a];

В «Привет мире», str[4] является o, а также str[6] является w, Приведенный выше код будет: хранить o в Filename[4] и w в Filename[6], вместо Filename[5], Компьютер делает только то, что вы говорите, а теперь то, что вы хотите, чтобы он делал. Ваша логика пропустила пробел, но все, что она сделала, это не скопировала его в соответствующую позицию в Filename буфер. Этого недостаточно для выполнения данной задачи.

Чтобы сделать это правильно, вам нужно поддерживать отдельную переменную индекса, вызвать ее bнапример, инициализировать его до 0, затем:

 if(str[a]!=' ')
Filename[b++]=str[a];

и не забудьте обнулить Filename, в конце.

4

Другие решения

Ваш Filename массив не инициализирован. Это означает, что изначально он может содержать любые значения, включая нули (что, вероятно, и происходит).

Теперь рассмотрим ваш алгоритм — вы начинаете копировать данные до первого пробела, и вы пропускать его местоположение и продолжить со вторым словом. Пропуская, вы покидаете место, соответствующее месту в Filename в своем первоначальном состоянии, то есть неинициализирован. Если исходное значение там 0, оно соответствует терминатору строки (\0). Когда вы печатаете строку, анализ останавливается при обнаружении \0, так что вы не видите остальные данные напечатаны.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector