Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Удаление символов из строки 
:(
    Опции темы
STAVR
Дата 17.5.2007, 22:25 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Есть последовательность чисел 59015509. Мне надо убрать из нее все 5 и 0. С 5 уменя получилось:

Код
#include <conio.h>
#include <stdio.h>

#define N 10

void main()
{
    int i = 0, j = 0;

    char c1[N + 1] = {"59015509\0"},
     c2[N * 2 + 1]; 

    printf("\n%s\n", c1);

    for ( ; i < N; i++)
    {
        if (c1[i] != '5')
    {
            c2[j] = c1[i];
            j += 1;  } 
    
    }
    c2[j] = '\0';  
    printf("%s\n", c2);
getch();

}


А как сделать чтобы одновременно удалялись и 5, и 0?

P.S. Подскажите, что такое '\0'?

PM MAIL   Вверх
dizzy1984
Дата 18.5.2007, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Цитата(STAVR @  17.5.2007,  22:25 Найти цитируемый пост)
 как сделать чтобы одновременно удалялись и 5, и 0?

поменять
Код

if (c1[i] != '5')

на
Код

if (c1[i] != '5' && c1[i] != '0')

Цитата(STAVR @  17.5.2007,  22:25 Найти цитируемый пост)
P.S. Подскажите, что такое '\0'?

Символ с кодом 0.
PM MAIL   Вверх
Misha_White
Дата 18.5.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: 1
Всего: 1



Цитата(STAVR @  18.5.2007,  05:25 Найти цитируемый пост)
P.S. Подскажите, что такое '\0'?

Это конец строки!

--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
STAVR
Дата 18.5.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Огромное спасибо!!!
PM MAIL   Вверх
STAVR
Дата 19.5.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Еще такой вопрос:

А если мне надо, чтобы число 59015509 было дано не изначально, а вводилось с клавиатуры или из файла?
Я попробовал это сделать:

Код
#include <conio.h>
#include <stdio.h>

#define N 10
int i, j;
char z;

int main()
{
    char c1[N + 1],
     c2[N * 2 + 1]; 

    FILE *fout, *fin;
    printf("1. File or 2. Keyboard");
    z = getc(stdin);
    fout = fopen("207.dat", "rt");
    fin  = fopen("207.txt", "w+t");
    if (z == '1')
    {
        for(i = 0; i < 8; i++)
        fscanf(fout, "%s", &c1[i]);
    }
    if (z == '2')
    {
    printf("Enter numbers: \n");
    for(i = 0; i < 8; i++)
    scanf("%s", &c1[i]);
        fflush(stdin);
    }    
    
    printf("\n%s\n", c1);

    for (i = 1; i < N; i++)
    {
        if (c1[i] != '5' && c1[i] != '0')
    {
            c2[j] = c1[i];
            j += 1;  } 
    
    }
    c2[j] = '\0';  
    printf("%s\n", c2);

fclose(fin);
    fclose(fout);
getch();

}


Ввод работает, а сама замена нет. Пожалуйста, подскажите, что не правильно!
PM MAIL   Вверх
GIK
Дата 19.5.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Пара замечаний:
1) Вместо глобальных переменных, лучше используй объект, сруктуру например
2) Где проверка на то что файл найден, ты сразу берешся считывать из него данные, эт некрасиво smile 
Ща посмотрим что там у тебя smile


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Anikmar
Дата 19.5.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(STAVR @  19.5.2007,  13:29 Найти цитируемый пост)
for(i = 0; i < 8; i++)
        fscanf(fout, "%s", &c1[i]);

В цикле вводится строка в элемент массива типа char.

Вообще, зачем там цикл?
PM MAIL ICQ   Вверх
GIK
Дата 19.5.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Я непонял для чего тебе это, но все работает smile
Код

#pragma argsused
#include <conio.h>
#include <stdio.h>

#define N 10

int main()
{
    int i=0, j=0; char z=0;
    char c1[N + 1],
     c2[N * 2 + 1];

    FILE *fout, *fin;
    printf("1. File or 2. Keyboard");
    z = getc(stdin);

    fout = fopen("c:/test.txt", "rt");
    fin  = fopen("c:/test2.txt", "w+t");
    if(!fout) {printf("%s", "Nea..."); return 1;}
    if(!fin) {printf("%s", "Nea...") ; return 1;}

    if (z == '1')
    {
        for(i = 0; i < 8; i++) //8 символов, зачем....
        fscanf(fout, "%s", &c1[i]);
    };
    if (z == '2')
    {
    printf("Enter numbers: \n");
    for(i = 0; i < 8; i++)
      scanf("%s", &c1[i]);
    fflush(stdin);
    };

    printf("\n%s\n", c1);

    for (i = 1; i < N; i++)  //Начинаем со второго эллемента
    {
      if (c1[i] != '5' && c1[i] != '0')
      {
        c2[j] = c1[i]; //со второго эллемента кроме 5 и 0
        j++;
       }
    }
    c2[j] = '\0';
    printf("%s\n", c2);

fclose(fin);
    fclose(fout);
getch();

}

ЗЫ:
Код

int i, j;
char z;

Не факт что переменные равны 0  smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Anikmar
Дата 19.5.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Логика интерфеса непонятно.
Спросили: файл или клава.
Что-то ответили
Все равно по-любому открываем файл, хотя пользователь сказал "клава"

Не логично как-то
PM MAIL ICQ   Вверх
GIK
Дата 19.5.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Цитата

В цикле вводится строка в элемент массива типа char.

Вообще, зачем там цикл? 

Блин, а я и не заметил что там %s, а не   smile 
Кстати пробовал с %c, почему-то считывает только 4 символа? 
Код


#include <conio.h>
#include <stdio.h>

#define N 10

int main()
{
    int i=0, j=0; char z=0;
    char c1[N + 1],
     c2[N * 2 + 1];

    FILE *fout, *fin;
    printf("1. File or 2. Keyboard");
    z = getc(stdin);

    fout = fopen("c:/test.txt", "rt");
    fin  = fopen("c:/test2.txt", "w+t");
    if(!fout) {printf("%s", "Nea..."); return 1;}
    if(!fin) {printf("%s", "Nea...") ; return 1;}

    if (z == '1')
    {
        for(i = 0; i < 8; i++) //Çà÷åì 8 ñèìâîëîâ, íåïîíÿòíî....
        fscanf(fout, "%s", &c1[i]);
    };
    if (z == '2')
    {
    printf("Enter numbers: \n");
    for(i = 0; i < 8; i++)
      scanf("%c", &c1[i]);
    fflush(stdin);
    };

    printf("\n%s\n", c1);

    for (i = 1; i < N; i++)  //Çà÷åì-òî íà÷èíàåì ñî âòîðîãî ýëëåìåíòà
    {
      if (c1[i] != '5' && c1[i] != '0')
      {
        c2[j] = c1[i]; //Ñîáèðàåì ÷èñëà íà÷èíàÿ ñî âòîðîãî è ïðîïóñêàÿ 5 è 0
        j++;
       }
    }
    c2[j] = '\0';
    printf("%s\n", c2);

fclose(fin);
    fclose(fout);
getch();

}


Это сообщение отредактировал(а) GIK - 19.5.2007, 14:27


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
STAVR
Дата 19.5.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Цитата
Логика интерфеса непонятно.
Спросили: файл или клава.
Что-то ответили
Все равно по-любому открываем файл, хотя пользователь сказал "клава"

Не логично как-то


Вообще-то между операторами scanf fscanf есть некоторая разница!

Цитата
Я непонял для чего тебе это


Сам не знаю, зачем в нашем институте дают такие задания!


PM MAIL   Вверх
STAVR
Дата 19.5.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Спасибо за программу на Си. Все отлично работает! Но у меня еще одна проблема. теперь мне нужен эквивалент программы на Паскале. У меня не получается:

Код
CONST
N=10;

var
i,j,z : integer;
c1 : array[1..11] of char;
c2 : array[1..21] of char;
fout:text;
fin:text;
begin
write ('1.File or 2.Keyboard');
readln (z);
assign (fout,'92.dat');
assign (fin,'92.txt');
reset (fout);
rewrite (fin);
if z=1 then
for i:=0 to 8 do
  read(fout,c1[i]);
if z=2 then
begin
write('Enter numbers:');
for i:=0 to 8 do
  read(c1[i]);
end;


write(c1[i]);

for i=1 to N do
if c1[i]!='5' or c1[i]!='0' then
begin
c2[j]:=c1[i];
j:=j+1;
end;

c2[j]:='\0';
write(c2[j]);

close(fout);
close(fin);
end. 


Во-первых в Паскале нет '!=', а замены в Паскале я не знаю! Но по-моему там еще много ошибок!

Спасибо!
PM MAIL   Вверх
Misha_White
  Дата 20.5.2007, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: 1
Всего: 1



STAVR
Цитата(STAVR @  20.5.2007,  00:44 Найти цитируемый пост)
Во-первых в Паскале нет '!=', а замены в Паскале я не знаю! Но по-моему там еще много ошибок!

В паскале например
Код

x<>y

Цитата

Код

c1 : array[1..11] of char;
c2 : array[1..21] of char;


Лучше взять обычный String...
Поиск еще проще... Pos();-ищет подстроку, возвращает позицию.
Delete();-Удаляет подстроку в строке...
Параметры посмотри в Help-e(Ctrl+F1)

Добавлено @ 05:46
STAVR
Цитата

Код

fout:text;
fin:text;


Возьми типизированный файл
Код

Fin:file of string;


Это сообщение отредактировал(а) Misha_White - 20.5.2007, 16:14
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
STAVR
Дата 20.5.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Я не понял! Напиши, пожалуйста, весь код программы целиком!
PM MAIL   Вверх
Misha_White
Дата 20.5.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: 1
Всего: 1



STAVR
Пожалуйте: smile 
Код

Program P1;
uses crt;
var
s:string;
fout:file of string;
find5,find0:byte;
begin
clrscr;
assign(fout,'g:\92.txt');
write ('1.File or 2.Keyboard');
readln (z);
if z=2 then
 begin
   rewrite(fout);
    writeln('Vvedite stroku:');
    readln(s);
   write(fout,s);
  repeat
   find5:=Pos('5',s);
    delete(s,find5,1);
     find0:=Pos('0',s);
   delete(s,find0,1);
  until (find5=0) and (find0=0) ;
 end
else
 begin
  reset(fout);
  read(fout,s);
  writeln(s);
  repeat
   find5:=Pos('5',s);
    delete(s,find5,1);
     find0:=Pos('0',s);
   delete(s,find0,1);
  until (find5=0) and (find0=0) ;
 end;
 writeln(s);
readln;
close(fout);
end.

 smile

Добавлено через 1 минуту и 29 секунд
Тут конечно нужно еще и проверки написать... Думаю, что сам справишься...
Сначала выбери ввод с клавы, чтобы создать файл...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1125 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.