Как поставить пробел после запятой в строке?
Нужно вставить 1 пробел после каждой запятой, если он отсутствует перед следующим словом. У меня есть код, но он ожидаемо не работает
#include <cstring>
#include <iostream>
int main() {
char sentence[256];
printf("Введіть текст: ");
fgets(sentence, sizeof(sentence), stdin);
for (int i = 0; i < strlen(sentence); i++) {
if (sentence[i] == ',' && sentence[i++] != ' ') {
sentence[i] = sentence[i + 1];
sentence[i++] = ' ';
}
}
printf("\nВаш редагований текст: %s", sentence);
return 0;
}
Ответы (2 шт):
Автор решения: Bloody.cpp
→ Ссылка
Это уже не C++, а C какой-то. Забудьте про printf() и fgets(), в C++ используют cout и cin. Используйте класс std::string. Почитайте это Кляц, а после уберите i++ где оно не нужно, заменив на i + 1
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string usrStr;
string finStr;
cout << "Введите текст: " << endl;
getline(cin, usrStr);
for (size_t x = 0; x < usrStr.length(); x++)
{
if (usrStr[x] == ',')
{
if (usrStr.length() <= x + 1)
{
finStr += ',';
break;
}
if (usrStr[x + 1] != ' ')
{
finStr += ", ";
}
else
{
finStr += ',';
}
}
else
{
finStr += usrStr[x];
}
}
cout << "Ред. строка: " << finStr << endl;
system("pause");
return 0;
}
Ввод: I,Love, C++
Вывод: I, Love, C++
Автор решения: Harry
→ Ссылка
Как сдвинуть массив? Примерно так:
#include <cstring>
#include <iostream>
int main()
{
char sentence[256];
printf("Введiть текст: ");
fgets(sentence, sizeof(sentence), stdin);
for (int i = 0; i < strlen(sentence); i++)
{
if (sentence[i] == ',' && sentence[i+1] != ' ')
{
for(int j = strlen(sentence)+1; j > i; --j)
sentence[j] = sentence[j-1];
sentence[i+1] = ' ';
}
}
printf("\nВаш редагований текст: %s", sentence);
return 0;
}
В принципе нужна еще проверка, что места в массиве для сдвига хватит, но это уж подумайте сами...