IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Строки, С++
sheka
сообщение 22.03.2010 21:59
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Подскажите, пожалуйста, как из строки удалить слово?

Пока реализовывал, понял из strcat, что char и const char разные типы (почему, что, где еще пока не понял). Решил обойти этот момент через указатели, но здесь меня вообще убило.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main (){
char s[] ="The; first E36 M3, to be imported to the United States: was the 1995 model.";
char *p; //если закомментировать эту строку
char *n;
printf("%s\n",s);
//*n='\0'; и раскомментировать эту
printf("%s\n",n);

n=s;

printf("%s\n",n);
return 0;
}

получаются чудеса: в *n хранится часть строки s. Если не ошибаюсь, вот эта the 1995 model. Следственно закомментированая строка ее очищает. И, самое поразительное, что потом при n=s; в n сохраняется оставшаяся часть строки The; first E36 M3, to be imported to the United States: was.
Сможете объяснить такой феномен? lol.gif


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 26.03.2010 21:41
Сообщение #2


Гость






Вот так:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
int main (){
const int L = 2; // Будем удалять слова вот такой длины

const char *p =
"The; first E36 M3, to be imported to the United States: was the 1995 model.\0";

char s[256] = {0}; // сюда пишем строку - результат
char *pp = s; // указатель на строку - результат

int len = 0; // длина слова
for(; *p; p++) // идем по строке
{
if(strchr(";:.,!? ", *p)) // текущий символ - разделитель?
{
if(len == L) // да... Предыдущее слово - нужной длины?
{
pp -= L; // да... Значит, отходим на L символов назад...
}
len = 0; *pp++ = *p; // В любом случае слово закончилось,
// значит длина его обнуляется, да
// и разделитель заносим в результ. строку
}
else
{
len += 1; // нет, это был не разделитель... длину
*pp++ = *p; // увеличиваем, символ пишем в результат...
}
}
*pp = '\0'; // на всякий случай завершаем строку нулем...

printf("%s\n", s); // вот и все, строка готова...
return 0;
}
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"