Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
AlexLoz
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 9
#1

Определить длину введенной строки L, и, если длина L<10, то удаляются все A...Z

23.10.2014, 22:04. Просмотров 908. Ответов 13
Метки нет (Все метки)

Задание: ввести с клавиатуры строку символов, программа должна определить длину введенной строки L, и, если длина L<10, то удаляются все A...Z.
Наклепал такой вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
int main(void)
{ 
char L[80];
char rstr;
int i;
gets(L);
rstr = strlen (L);
if (rstr<10) {
for (i=0; i<rstr;i++)
{ if (L[i]>='A' && L[i]<='Z') L[i]=""; }
printf ("Length is %d", strlen (L));
}
else printf ("Length is %d", rstr);
return 0;
}
. И вроде как все отлично работает, но как только я решил добавить строку "puts("Enter any characters");" программа отказывается корректно "удалять все A...Z"
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
int main(void)
{ 
char L[80];
char rstr;
int i;
puts("Enter any characters"); 
gets(L);
rstr = strlen (L);
if (rstr<10) {
for (i=0; i<rstr;i++)
{ if (L[i]>='A' && L[i]<='Z') L[i]=""; }
printf ("Length is %d", strlen (L));
}
else printf ("Length is %d", rstr);
return 0;
}
Подскажите, где подвох.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2014, 22:04
Ответы с готовыми решениями:

Определить длину введенной строки L, и, если длина L<10, то удаляются все A-Z (с указателями)
Задание: ввести с клавиатуры строку символов, программа должна определить длину...

Определить длину введенной строки L, и, если длина кратна 2, удалить из строки все четные числа
Ввести с клавиатуры строку текста, содержащего символы английского алфавита и...

Определить длину введенной строки, и если она меньше 10, то удалить все заглавные
прога короче делает вот чо: определяет длину введенной строки, если она меньше...

Определить длину введенной строки
Написал программу вот задание: &quot; Ввести строку символов. Определить длину...

Определить длину введенной строки
Ввести фамилию имя и отчество как одно текстовое данное. Определить длину...

13
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 22:13 #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char L[80];
    int i;
    puts("Enter any characters");
    gets(L);
    if (strlen(L)<10) {
        for (i = 0; i<strlen(L); i++)
        {
            if (L[i] >= 'A' && L[i] <= 'Z')
                L[i] = (char)" ";
        }
        printf("Length is %d", strlen(L));
    }
    else printf("Length is %d", strlen(L));
    return 0;
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4588 / 2409 / 667
Регистрация: 18.10.2014
Сообщений: 4,077
23.10.2014, 22:18 #3
Работать ваша программа в принципе не могла. Вот это присваивание

C
1
L[i]="";
уже является нелегальным в языке С, о чем вам, без сомнения, сообщил компилятор, но вы его сообщение, очевидно, проигнорировали. Слева у вас стоит char 'L[i]', а справа - строковый литерал '""'. Строковый литерал невозможно присвоить в единственный char. Строковый литерал в такой ситуации приводится к указательному типу. Присваивание указателя в переменную типа 'char' без явного приведения типа запрещено правилами языка.

Вопрос в том, что означает "удалить все A...Z". Если задача в том, чтобы забить все буквы A...Z пробелами, то достаточно исправить вышеупомянутую строку на

C
1
L[i]=' ';
Если же символ надо действительно удалить, то надо программой еще придется много работать. Символ удаляется из строки путем "подвигания" хвостовой части строки на освободившееся место.

Добавлено через 3 минуты
Цитата Сообщение от kiff20072008 Посмотреть сообщение
C
1
L[i] = (char)" ";
Ужас. И что же по вашему делает это присваивание?
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 22:19 #4
TheCalligrapher, да действительно не заметил что там двойные кавычки
0
AlexLoz
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 9
23.10.2014, 22:23  [ТС] #5
Оно присваивает символу "пустоту". Я не уверен в правильности этого варианта решения проблемы.

Добавлено через 3 минуты
К слову, ваш вариант решения проблемы не сработал, и программа напрочь отказывается не считать символы A..Z.
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 22:24 #6
AlexLoz, в смысле?
вот такой код заменяет A Z на пробелы
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char L[80];
    int i;
    puts("Enter any characters");
    gets(L);
    if (strlen(L)<10) {
        for (i = 0; i<strlen(L); i++)
        {
            if (L[i] >= 'A' && L[i] <= 'Z')
                L[i] = ' ';
        }
        printf("Length is %d", strlen(L));
    }
    else printf("Length is %d", strlen(L));
    return 0;
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4588 / 2409 / 667
Регистрация: 18.10.2014
Сообщений: 4,077
23.10.2014, 22:25 #7
Цитата Сообщение от AlexLoz Посмотреть сообщение
Оно присваивает символу "пустоту". Я не уверен в правильности этого варианта решения проблемы.
Во-первых, символу в языке С невозможно присвоить "пустоту". Не существует никакой "пустоты" в принципе. Существует символ "пробел", но символьные константы языке С записываются через одиночные кавычки. Тем не менее "пробел" - это не "пустота".

Во-вторых, выражение 'L[i] = (char)" "' берет строковый литерал '" "' и приводит его к типу "указатель", который указывает на положение этого литерала в памяти (пусть это адрес '0xABCDEFAB'). Затем это указатель насильно приводится к целочисленному типу 'char' каким-то платформенно-зависимым образом (а нашем примере это может быть '0xAB'). Затем это значение кладется в L[i].

Таки образом выражение 'L[i] = (char)" "' не "присваивает пустоту", а пихает в L[i] какой-то непредсказуемый адресный мусор.
1
AlexLoz
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 9
23.10.2014, 22:28  [ТС] #8
То ли я тупой, то ли лыжи не едут.
0
Миниатюры
Определить длину введенной строки L, и, если длина L<10, то удаляются все A...Z  
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 22:29 #9
AlexLoz, прошу прощения а что вы хотите там увидеть?
вы же не выводите строку=)
0
AlexLoz
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 9
23.10.2014, 22:33  [ТС] #10
Цитата Сообщение от kiff20072008 Посмотреть сообщение
в
В этом то и проблема, наверное. Как ее вывести?
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 22:34 #11
AlexLoz,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char L[80];
    int i;
    puts("Enter any characters");
    gets(L);
    if (strlen(L)<10) {
        for (i = 0; i<strlen(L); i++)
        {
            if (L[i] >= 'A' && L[i] <= 'Z')
                L[i] = ' ';
        }
        printf("Length is %d\n", strlen(L));
    }
    else printf("Length is %d\n", strlen(L));
    puts(L);
    return 0;
}
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4588 / 2409 / 667
Регистрация: 18.10.2014
Сообщений: 4,077
23.10.2014, 22:49 #12
Ни имейте в ввиду, что ваша программа строку "123AAA456B789" преобразует в строку "123 456 789", а не в строку "123456789". Т.е. она не удаляет буквы, а просто забивает их пробелами. Это несколько разные вещи.
0
AlexLoz
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 9
23.10.2014, 22:52  [ТС] #13
А есть возможность, чтобы она банально не считывала символы A Z?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4588 / 2409 / 667
Регистрация: 18.10.2014
Сообщений: 4,077
23.10.2014, 23:04 #14
Возможности такой нет.

Но, если уж на то пошло, за 'gets' надо сразу больно бить по рукам. Вместо 'gets' используйте 'fgets(L, sizeof L, stdin)'
0
23.10.2014, 23:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2014, 23:04

Программа должна определить длину введенной строки
Привет... 10. Ввести с клавиатуры строку символов. Признак окончания ввода...

Удалить все цифры строки, если ее длина кратна 5
Ввести символьную строку, если ее длина кратна 5, удалить все цифры. Вывести...

Вычислить длину введенной с клавиатуры строки
Напишите программу, которая вычисляет длину введенной с клавиатуры строки.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru