Написать функцию, преобразующую строку символов так, что между словами всегда находится два пробела - C (СИ)
Формулировка задачи:
Написать функцию, преобразующую строку символов так, что между словами
всегда находится два пробела.
Вот попробовал что то написать:
С функциями плохо дружу, мало читал литературы Друзья, помогите доработать код
#include <stdio.h>
#include <conio.h>
void qwerty(char *s)
{
char *s=new char[100];
char *w=new char[100];
for(int i=0, k=0; i<100; i++, k++)
{
if(s[i]==' ' || s[i]=='\0')
{
w[k]='\0';
if(k>0)
printf("%s ", w);
k=-1;
}
else
w[k]=s[i];
}
}
void main (void)
{
char *stringPtr=new char[100];
char *wordsPtr=new char[100];
puts("Enter string:");
gets(stringPtr);
puts("The resulting string:");
printf("%s", qwerty(stringPtr));
getch();
}Алгоритм:
Разбиваем строку на слова и выводим эти слова через 2 пробела вот код разбиения строки на слова и вывода строки, в которой между словами 2 пробела.#include <stdio.h>
#include <conio.h>
void main (void)
{
char *stringPtr=new char[100];
char *wordsPtr=new char[100];
gets(stringPtr);
for(int i=0, k=0; i<100; i++, k++)
{
if(stringPtr[i]==' ' || stringPtr[i]=='\0')
{
wordsPtr[k]='\0';
if(k>0)
printf("%s ", wordsPtr);
k=-1;
}
else
wordsPtr[k]=stringPtr[i];
}
getch();
}Решение задачи: «Написать функцию, преобразующую строку символов так, что между словами всегда находится два пробела»
textual
Листинг программы
void print(char* str) {
char *p = str;
int flag=0;
while (*p) {
if (*p == ' ' || *p == ',' || *p == '\t') {
if (!flag) {
flag=1;
printf(" ");
}
}
else {
putchar(*p);
flag=0;
}
p++;
}
}
int main() {
char str[] = "qweqweqwe sgfg geerge, egerge ergeg erger erge ererg";
print(str);
getchar();
}
Объяснение кода листинга программы
- Объявлена функция print с параметром char* str.
- В функции создана переменная p, которая будет использоваться как указатель на текущий символ входной строки.
- Создана переменная flag со значением 0. Она используется для отслеживания того, было ли найдено пробельное или знаковое поле (пробел, запятая, табуляция).
- В цикле while происходит проход по каждому символу входной строки.
- Если текущий символ является пробелом, запятой или табуляцией и переменная flag равна 0, то значение flag меняется на 1 и выводится дополнительный пробел.
- Если текущий символ не является пробелом, запятой или табуляцией, то он выводится на экран, а переменная flag меняется на 0.
- После обработки каждого символа указатель p увеличивается на 1.
- В конце функции main создается строка str, которая передается в функцию print.
- В конце функции main вызывается функция getchar для ожидания нажатия клавиши.
- Входные данные для функции print:
qweqweqwe sgfg geerge, egerge ergeg erger erge ererg. - Выходные данные функции print:
qwe qwe qwe sgfg geerge egeg erger erge ererg.