На консоль выводятся ненужные символы - 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, что означает успешное завершение работы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д