Jochen Arndt
Есть еще ошибки помимо тех, которые упомянуты в решении 1:
for(i=0;str[i]!='\0';++i)
Здесь вы получаете доступ к
str
переменная без ее инициализации. Компилятор будет жаловаться на это при использовании высокого уровня предупреждения.
Вы, вероятно, хотите использовать
word
здесь вместо строки.
То же самое и для переменной
j
который никогда не инициализируется.
Правильный код:
int i,y,c,w;
int j = 0;
char str[100],word[1000];
str[0] = '\0';
// ...
for(i=0;word[i]!='\0';++i)
Следующая проблема в этой строке:
y=strlen(str);
То
strlen
функция требует, чтобы переданная строка завершалась NULL. Но ваша строка не заканчивается NULL. Вместо использования
strlen
вы можете сами подсчитать длину (при добавлении символов) или установить следующую величину в NULL:
{
if( word[i]!=' ')
{
str[j] = word[i];
j++;
// Terminate string here or use j as count (current length)
str[j] = '\0';
}
Обратите внимание, что ваш
change
функция также подвержена влиянию (строка также должна быть завершена нулем для сравнения). Таким образом, обеспечение того, чтобы он всегда заканчивался NULL, было бы лучшим решением.
[no name]
должен ли я использовать
int change(char *, int);
void star(char *, int);
как прототипы? // компилятор заставляет меня делать то же самое, но я не могу догадаться, почему?
2) Если(чего strcmp(STR, на "покакать") == 0 ||strcmp стандарта(стр, "шарики") == 0)
это было рекомендовано.. но должен ли я заключать шары или какашки в одинарные или двойные кавычки?
3) ошибка возникает, когда str[i]="*"; Почему?
Jochen Arndt
Одинарная кавычка для одиночных символов и двойные кавычки для строк (список символов с завершающим нулевым байтом).
Это ответы 2. и 3. (что является ошибкой, которую я наблюдал).
До 1:
Еще одна ошибка о наблюдал. Объявление в верхней части файла использует char, в то время как более поздняя реализация использует char[]. Вы должны использовать одно и то же в обоих местах. В вашем случае это char* или char[].
char - это один символ, в то время как char* - это указатель на один или несколько символов, таких как char[] (массив символов, фактически такой же, как char*).
Строка - это список символов (char*), конец которого обозначается нулевым байтом.
[no name]
1) ошибка: символьная константа должна быть длиной в один или два символа
2)я не могу назначить str[i] ="*";
новый кодекс
int change(char[]);
void star(char [], int);
пустота главная()
{
int i, y, j=0, w;
char str[100], word[1000];
str[0]= '\0';
clrscr();
cout<< "введите текст" < & lt;endl;
получает (слово);
cout<< "строка перед блоком" < & lt;endl;
ставит (слово);
cout<< " строка после блока";
for (i=0; word[i]!= '\0';++i)
{
если (слово[i]!=' ')
{
str[j] = слово[i];
Дж++;
str[j]= '\0';
}
если (слово[i]==' ')
{
w=изменение(str);
если (w==1)
{
звезда (str, j);
cout< & lt; str<<" ";
j=0;
}
если (w= = 0)
{
cout< & lt; str<<" ";
j=0;
}
}
}
геч();
}
интервал изменения(ул. гольца [])
{
if (strcmp(str,'poop'==0)| / strcmp(str, 'bad'==0))
возврат 1;
else return 0;
}
void star(char str [], int y)
{ int i;
Для(я=1;я&Л;Г-1;++я) {="" стр[я]="0;" }="" &усилитель;усилитель; nbsp;="" &ЛТ;="" деление=""&ГТ; &ЛТ;див ИД="EditDialogPlaceholder"&ГТ;&ЛТ;/дел&ГТ; &ЛТ;див ИД="ReplyDialogPlaceholder"&ГТ;&ЛТ;/дел&ГТ;
Jochen Arndt
str[i] обращается к символу
"*"- это строка
Так и должно быть:
str[i] = '*';
Также как уже отметил Грифф:
если(0 == strcmp стандарта(стр,"какашки") || 0 == strcmp стандарта(стр,"плохо"0))
В приведенном выше примере вы должны использовать строки. Обратите внимание также, что ваши условия (по сравнению с нулем) поставлены неправильно.