Как посчитать количество символов в строке си
Перейти к содержимому

Как посчитать количество символов в строке си

  • автор:

Подсчёт символов в строке

У меня меня есть строка, в которой могут быть символы как английского, так и русского алфавитов, и мне не вполне понятно, как посчитать в такой строке количество символов.

string test = "ТестTest"; cout  

Как известно, в потоке выхода мы получим не количество символов, а количество байт, то есть не 8, а 12. А хотелось бы как-то узнать именно количество символов. Какое решение проблемы в данном ситуации будет правильным?

Отслеживать

29k 14 14 золотых знаков 61 61 серебряный знак 119 119 бронзовых знаков

Подсчет символов, строк и слов

Программа считает количество введенных пользователем символов, строк и слов. Чтобы программа корректно закончила работу и правильно посчитала, после набора строк надо перейти на новую строку, после чего нажать Ctrl + D (по крайней мере в терминале Linux).

#include int main() < char ch, flag=-1; unsigned c=0; // символы unsigned w=0; // слова unsigned n=0; // строки while ((ch = getchar()) != EOF) < if (ch == '\n') n++; else c++; if (ch == ' ' || ch == '\n') flag = -1; else if (flag == -1) < flag = 1; w++; >> printf("Символы: %u\n", c); printf(" Слова: %u\n", w); printf(" Строки: %u\n", n); >
one two three four Символы: 16 Слова: 4 Строки: 3

X Скрыть Наверх

Решение задач на языке C

(Си) Подсчитать общее количество цифр и знаков '+', '-', и '*', входящих в строку

(язык си) Подсчитать общее количество цифр и знаков '+', ' -', и '*', входящих во вводимую с клавиатуры строку.
В чем ошибки?:
#include
#include
#include
#include
int main(void)
<
int kol;
char *str=new char[80];
puts("\nVvedite stroku:\n");
gets(str);
kol=0;
for(int i=0;i

Дополнен 12 лет назад

int main(void)
<
int kol;
char *str=new char[80];
puts("\nVvedite stroku:\n");
gets(str);
kol=0;
for(int i=0;i

Дополнен 12 лет назад
чет невлазит .
Дополнен 12 лет назад

int main(void)
<
int kol;
char *str=new char[80];
puts("\nVvedite stroku:\n");
gets(str);
kol=0;
for(int i=0;i < sizeof (str) ; i++ )
if(str=="1234567890"||'+'||'-'||'*') kol=kol+1;
printf("\nVasha stroka soderjit %i cifr i znakov + -*\n", kol);
scanf("%i",&kol);
return 0;
>

Лучший ответ

printf("Общее кол-во цифер и заданных символов = %d\n",cif+p);
return 0;
>

Подсчитать количество слов в строке (Си)

Слово – последовательность символов, разделенных пробелами. Под пробелами тут будем понимать символ пробела (не табуляции или чего-то еще). Посчитать число пробелов (и групп пробелов) – неправильно. Ведь строка без пробелов может быть пустой, а может содержать одно слово. Строка с одним словом может содержать ноль пробелов, а также 1 или 2 группы пробелов (перед и после слова). Правильно – считать пары <группу пробелов> Решение будет таким: 1. Считаем с текущей (изначально нулевой) позиции в строке длину группы пробелов, прибавляем ее к текущей позиции. За счет этого группа “пропущена”.
2. Считаем с текущей позиции длину группы непробельных символов ( word_length ).
3. Если word_length болшье нуля – увеличиваем счетчик слов. Прибавляем длину слова к текущей позиции – за счет этого слово “пропущено”.
4. Процесс повторяется пока счетчик не станет больше длины строки. Ясно что подсчет пробелов и непробелов – это две разные функции, которые отличаются лишь оператором сравнения текущего символа. Красивое решение заключается в передаче этой функции в качестве параметра указателя на функцию сравнения. Функции сравнения при этом можно описать так:

int is_space(char c) < return c == ' '; >int is_not_space(char c)

Имея их совсем несложно добавить к пробельным символам что-то еще – табуляции, короткие пробелы, переводы строки т.п. Функция подсчета тогда может быть описана так:

int count_start_if(char* str, int (*pred)(char)) < int count = 0; while (*str != 0) < if (pred(*str)) < count++; str++; >else break; > return count; >

Первым аргументом она принимает указатель, однако в качестве него может быть передана подстрока так: &str[i] – передаем часть строки, начиная с i -того символа. Исходный код программы целиком:

#include #include #include #include int is_space(char c) < return c == ' '; >int is_not_space(char c) < return 0 == is_space(c); >int count_start_if(char* str, int (*pred)(char)) < int count = 0; while (*str != 0) < if (pred(*str)) < count++; str++; >else break; > return count; > int count_words(char* str) < int length = strlen(str); int count = 0; int i = 0; while (1) < int spaces_count = count_start_if(&str[i], is_space); i += spaces_count; if (i >= length) < break; >int word_length = count_start_if(&str[i], is_not_space); if (word_length > 0) < count++; >i += word_length; if (i >= length) < break; >> return count; > int main()

Пример выполнения программы:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *