Пользователь вводит строку, нужно посчитать, сколько в ней слов.
Слова разделяются пробелами, значит, достаточно посчитать их количество, но пробелов всегда на 1 меньше, чем слов (исключая случай когда пробел стоит на конце строки), поэтому хорошо бы прибавить к числу пробелов единичку.
Реализация:
#include "stdafx.h"
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <string.h>
int main()
{
char myString[40];
puts("Vvedyte stroku: ");
gets(myString);
int space=0;
for (int i =1; i<=strlen(myString); i++)
{
if (myString[i] == ' ')
{
space = space+1;
}
}
printf("chislo slov ravno %d\n", space+1);
}
В коде мы бежим по символам строки и смотрим не пробел ли это — если так, то увеличиваем количество на 1. Можно реализовать функцию для проверки такого:
int WordCount(char S [])
{
int space=0;
for (int i = 1; i<= strlen(S); i++)
{
if (S[i] == ' ')
{
space++;
}
}
return space+1;
}
Принимает строку, возвращает количество слов.
Программа конечно неплохая, но вот оптимизация никакая >_>
А можете что-нибудь предложить конкретное по оптимизации? Пара вариантов у меня есть, но здесь они не являются необходимостью, так как программа маленькая и учебная.
Привет!
Потроллю, быдлокод :)
1. int main() — воздержусь комментировать такое объявление main’а.
2. char myString[40]; — а почему строка юзера не может быть больше 40 символов? Бред…
3. puts(«Vvedyte stroku: «) — ну локализацию бы чтоли выбрал :)
4. Если ты заявляешь, что код плюсовый, так и объявляй счётчик цикла по плюсовому: не int i; for (i=…, а for (int i =…
О! Привет =)
1. Чем тебе он не понравился? тебе давай аргументы строки командной? Нафига?
2. Это так, просто потому, что мои одногруппники (да и читатели) могут не знать динамической памяти. Как выделять и пользовать.
3. Можно и локализировать — в некоторых программах тут я это делал:
#include
setlocale(LC_ALL, Russian»»); примерно так.
4. Внутри функции это именно так. В коде я править не стал. Допустимо и то и то, однако, ты прав — лучше переменную оборачивать внутрь.
Введу Вас в курс дела:был зачет,с ограничением по времени
Отсюда:
«puts(«Vvedyte stroku: «) – ну локализацию бы чтоли выбрал :)«-возможно человек торопился и ему не setlocale’ов и прочей мелочи
«char myString[40];» — возможно просто специфичное условие задачи
«Если ты заявляешь, что код плюсовый, так и объявляй счётчик цикла по плюсовому: не int i; for (i=…, а for (int i =…«-наверное тема больше для холиваров:D не уверен,что нативно он в плюсах появился раньше,чем в 99ом Си.
1. Потому что правила такие :)
2. А что сложного? Указатель? char* myString; — всё.
В лекциях дают чистый си… поэтому…
PS: Я имел ввиду работу с памятью в си
Нормальная программа. Не говорю, что предел совершенства, но соотносимо с целями и задачами она написана правильно.
А если в строке 2 или 3 пробела?:)
Программа будет считать слова которые не существуют.
То да, программа будет работать некорректно. Можно написать исправленную версию :)