2015-03-19 5 views
-5

Напишите программу, которая читает 4 Имена пользователя и сравнивает длины для поиска наименьших двух в длину (strlen). затем сравнивает один из этих двух алфавитов и печатает первый буквенно-буквенный порядок.Как сравнить длину 4 строки согласно strlen


Я изо всех сил, чтобы сравнить между 4 строк .. и результат должен быть не менее 2 .. не только один. Вторая часть проста, как только вы найдете минимум 2, я могу использовать strcmp.

Для получения дополнительной информации, скажем, пользователь ставит 4 названия. Джейкоб, Альфред, Русы, Райанс. Я хочу, чтобы программа, которая видит кратчайшие 2 по длине, используя базовый strlen. Любая помощь?

ИДК, почему я получил вниз голосовала так быстро лол уу Вы, ребята, так что средний: P

Я попытался вложенным, если условия .. но это была ужасная идея ..

#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
int main() { 
    char a[30],b[30],c[30],d[30]; 
    gets(a); 
    gets(b); 
    gets(c); 
    gets(d); 
    if (strlen(a)<strlen(b)&&strlen(a)<c) //Not successful because d is left. 
    getch(); 
} 
+0

Почему бы не сохранить длину каждой строки в переменных и проверить, какая из них меньше –

+0

Это домашнее задание. Это требует, чтобы вы попытались: а) прочитать лекции. б) попробуйте написать код. c) Застрял и спросите, почему этот бит кода не делает то, что ожидается –

+3

Пожалуйста, отредактируйте свой вопрос, чтобы включить код, который вы пробовали. Похоже, вы что-то пробовали или, по крайней мере, начали. Если вы покажете нам, где вы застряли, мы, вероятно, можем доставить вас за горб. –

ответ

1

Использование QSort , http://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm Он может сортировать массив по любым критериям, которые вы хотите, так как вы пишете функцию сравнения.

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

int compare(const void *a, const void *b) 
{ 
    printf("compare %s %s\n",a,b); 
    int sa = strlen((const char*)a); 
    int sb = strlen((const char*)b); 
    if (sa != sb) 
    { 
     return sa - sb; 
    } 
    return strcmp((const char*)a,(const char*)b); 
} 

int main() 
{ 
    char str[][100] = { "Jacob", "Alfred", "Ruess", "Reigns" }; 
    int length = sizeof(str)/100; 

    qsort(str, length, 100, compare); 
    int firstLen = strlen(str[0]); 

    for (index= 0 ; index < 4 ; index++) 
    { 
     if (strlen(str[index]) != firstLen) 
     { 
      break; 
     } 
     printf("%s\n",str[index]); 
    } 

} 
+2

qsort - серьезный избыток для всего 4 сущностей, весь этот проект может быть выполнен с помощью нескольких вызовов, 4 - для ввода строк, 4 - для strlen(), чтобы найти кратчайшие 2 строки, 1 - strcmp(), чтобы определить, в первую очередь, в алфавитном порядке. 1 для printf() для вывода выбранной строки. – user3629249

+0

Очевидно, что студент задает вопрос. Зачем писать специальный случай для 4 записей, когда вы можете узнать, как это сделать для 4 или 4000? –

0

Пусть

char s1[100],s2[100],s3[100],s4[100]; 

быть 4 строки и пусть

int a,b,c,d; 
a=strlen(s1); 
b=strlen(s2); 
c=strlen(s3); 
d=strlen(s4); 

быть 4 длины.

Тогда вы можете легко использовать, если заявления, чтобы найти два кратчайшим, и как только вы их найдете, вы знаете, что a содержит длину s1, так что если a является самым маленьким, вы знаете, что s1 имеет наименьшую длину, так что вы может реализовать эту часть с инструкциями if (вы должны попробовать эту часть самостоятельно, поскольку это вопрос домашней работы, а также потому, что это не так сложно, поэтому сделать это самостоятельно даст вам больше опыта, чем просто скопировать вставку кода, сделанного кем-то другим)

Затем, как вы уже сказали, вы знаете, как упорядочить их по алфавиту, вы должны его реализовать.

Ну, это дело всего за 4 строки. Если у вас есть больше, то это совершенно другой метод (подсказка: использование массивов)

Вот простой алгоритм, который не слишком сложно реализовать

  1. Принимать 4 строки.
  2. магазин длина.
  3. найдите самую маленькую строку (сделайте код, имея в виду случай, когда две маленькие строки имеют одинаковую длину).
  4. Затем найдите длину, Гретер чем, чем он (или равен ему), но меньше, чем у других
  5. Теперь осуществлять алфавитный по сравнению с strcmp() с струнами с самой короткой длиной.

UPDATE

После просмотра кода вы выложили, было бы легче хранить длину в 4-х переменных, чем при использовании strlen() несколько раз (что поможет вам реализовать ваш код проще).

+0

Сначала это не HW. Это был тест, который я провалил в lol. . Я очень новичок в программировании, так что медведь со мной. поэтому после того, как я сохраняю длины как переменные в a, b, c и d , Это будет: Защиту е (а, б, в): , если а> Ь: возвращение б еще: возвращают , если а> с: возвращение с еще: возвращают если a> d возвращение d еще возвращение a и т. д.? – ProgrammerNoob

+0

@ProgrammerNoob, Это может быть не самый эффективный способ, но почему бы не сохранить одну из длин в переменной наименьший и проверить, являются ли все остальные длины '> =' наименьшими, если не тогда, то сделать эту новую длину самой маленькой , и повторить (как я уже говорил, это не самый эффективный способ, но новичку легче привыкнуть к программированию с использованием этого метода жесткого кода). Тогда просто сделайте это так, чтобы найти вторую самую маленькую. –

0

Как насчет того, чтобы дать вам эту идею, и вы пишете код? Звучит хорошо?

Итак, вот что вам нужно сделать.

  1. Внесите четыре строки.
  2. вызов strlen() один раз с каждой строкой ввода и сохранение их длины.
  3. Определите, какие две строки следует сравнивать на основе наименьшего и второго значения наименьшей длины.
  4. звонок strcmp() с этими двумя строками.

Как strcmp(s1, s2) возвращает

целое число, меньшее, равное или больше нуля, если s1 (или первые п байтов их) находится, соответственно, будет меньше, чем, чтобы соответствовать, или быть больше, чем s2.

у вас будет алфавитно меньшая (или более крупная) строка.