На консоль выводятся ненужные символы - C (СИ)
Формулировка задачи:
Помогите плз найти,что не так,хочу вывести строку b,в которую скопировал символы из s до 2 пробела.
Выводит половину слова из s и дальше идут какие-то MMMMMMMMMMMMMMMMMMMMMMMMMMMM.
Помогите,прошу
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <locale>
int main()
{
setlocale(LC_CTYPE, "Russian");
char s[80]; //исходная строка
char a[80]; //слово
char b[80]; //временная строка
char *ps; //указатель
char *ps1; //указатель
int i; //для s
int j; //для a
int n; //для b
int len; //для подсчета длины строки
int len1; //для подсчета длины слова
int k=0; //для подсчета количества пробелов в строке
int k1=0; //для подсчета количества пробелов перед словом
int probel=0; //считает пробелы
int do2probela=0; //считает количество символов до 2 пробела
printf ("Введите строку:", s);
gets (s);
OemToCharA(s,s);
printf ("Ваша строка:%s", s);
len = strlen(s);
printf("\nДлина строки:%d",len);
printf ("\nВведите слово:", a);
gets (a);
OemToCharA(a,a);
printf ("Ваше слово:%s", a);
len1 = strlen(a);
printf("\nДлина слова:%d",len1);
j=0;
ps1=a;
i=0;
ps=s;
//стираем пробелы перед первым словом
while ((*ps!=0)&&(*ps==' '))
{
ps++;
k++; //считаем количество пробелов перед первым словом
}
while (i<=(len-k))
{
s[i]=*ps; //записываем в s[i] отформатированную исходную строку
i++;
ps++;
}
printf("\nОтчищенная от пробелов исходная строка:%s",s);
//стираем пробелы перед словом, которое хотим вставить
while ((*ps1!=0)&&(*ps1==' '))
{
ps1++;
k1++; //считаем количество перед словом, которое хотим вставить
}
while (j<=(len1-k1))
{
a[j]=*ps1; //записываем в a[i] отформатированное слово
j++;
ps1++;
}
printf("\nОтчищенное от пробелов слово:%s",a);
i=0;
while ((probel!=2)&&(i<=len-k)) //считаем количество символов до 2 пробела
{
do2probela++;
i++;
if (s[i]==' ')
probel++;
}
strncpy(b, s, sizeof(do2probela)); //копируем из строки s символы,которые находятся до 2 пробела во временную строку b
printf("\nВременная строка:%s",b);
getch();
}Решение задачи: «На консоль выводятся ненужные символы»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define C ' '
int main(int argc, char* argv[])
{
char s1[BUFSIZ], s2[BUFSIZ], *pch, t[BUFSIZ];
gets (s1);
fflush (stdin);
gets (s2);
pch = strchr ( s1 , C ) ;
if ( pch )
pch = strchr ( pch + 1 , C ) ;
if ( pch )
{
strcpy ( t, pch + 1 ) ;
strcpy (pch+1,s2);
strcat (s1," ");
strcat (s1,t);
}
printf (" Result : %s", s1);
fflush (stdin);
getchar ();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется константа C, которая имеет значение пробела
- В функции main() объявляются три строки: s1, s2 и t. А также указатель pch
- В первую строку s1 считывается строка из стандартного ввода
- Во вторую строку s2 считывается строка из стандартного ввода
- Ищется первый символ пробела в строке s1. Если он найден, то в pch записывается адрес следующего символа после пробела
- Если первый пробел не найден, то в pch записывается 0 (нулевой указатель), что означает конец строки
- Если пробел был найден, то в pch ищется следующий пробел. Если он не найден, то в pch записывается 0
- Если в pch есть символ пробела, то в t копируется все, что идет после него в s1
- В s1 добавляется пробел, а затем в него добавляется содержимое t
- В s1 добавляется содержимое s2
- На консоль выводится результат: s1
- В стандартный ввод считывается символ, чтобы программа могла корректно завершить работу
- Программа возвращает 0, что означает успешное завершение работы