Ответ 1
Вы можете использовать strcmp() function
для сравнения строк.
Кроме того, не забудьте очистить память, указанную word3
, с помощью функции free()
до того, как вы закончите.
Мне было поручено в школе написать программу, которая
Вот программа, которую я имею до сих пор. Строки хранятся в разных переменных, что затрудняет их сортировку. Если бы кто-нибудь мог дать мне руку и помочь мне закончить эту программу, я был бы очень благодарен.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word1[101];
char word2[101];
char* word3;
char buffer[101];
scanf("%s", word1);
scanf("%s", word2);
scanf("%s", buffer);
word3 = (char *) malloc(strlen(buffer)+1);
strcpy(word3, buffer);
return 0;
}
Вы можете использовать strcmp() function
для сравнения строк.
Кроме того, не забудьте очистить память, указанную word3
, с помощью функции free()
до того, как вы закончите.
Используйте strcmp, чтобы найти первое слово в алфавитном порядке.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word1[101];
char word2[101];
char* word3;
char buffer[101];
scanf("%s", word1);
scanf("%s", word2);
scanf("%s", buffer);
char* smallestword = word1;
if (strcmp(smallestword,word2) > 0) // smallest is bigger than word2
smallestword = word2;
if (strcmp(smallestword,buffer) > 0) // smallest is bigger than buffer
smallestword = buffer;
word3 = (char *) malloc(strlen(smallestword)+1);
strcpy(word3, buffer);
return 0;
}
Здесь программа включает код, чтобы получить подстроку из последних 4 символов наименьшего слова. Также исправлена ошибка, в которой word3
всегда был установлен на последний ввод слова (buffer
), а не smallestword
, как предполагалось.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char word1[101];
char word2[101];
char* word3;
char buffer[101];
scanf("%s", word1);
scanf("%s", word2);
scanf("%s", buffer);
char* smallestword = word1;
if (strcmp(smallestword,word2) > 0) // smallest is bigger than word2
smallestword = word2;
if (strcmp(smallestword,buffer) > 0) // smallest is bigger than buffer
smallestword = buffer;
word3 = (char *) malloc(strlen(smallestword)+1);
strcpy(word3, smallestword);
int m = strlen( word3 ), n = m - 4; // set offsets for substr
char* word3_substr = (char *) malloc(m-n);
strncpy( word3_substr, word3+n, m-1 );
printf( "%s", word3_substr );
return 0;
}
Я бы обобщил, построив массив указателей и отсортировав его с помощью минимального алгоритма сортировки пузырьков (или используя qsort в stdlib, лучше, поскольку вы не должны экстракодировать), если в порядке возрастания, тогда первый указатель указывает на строка, в которой вы нуждаетесь. Даже если это домашнее задание, я думаю, вы должны обобщить (что, если слова 4 или 5...?), И научиться обобщать такие задачи.
char *ptrs[] = { word1, word2, NULL };
// later you initilize third too
ptrs[2] = word3;
// use qsort with strcmp as comp. function
qsort(ptrs, sizeof(void *), 3, mwstrcmp);
// ...
// pick firts ptr
char *first = ptrs[0];
// print last 4 chars, see other answers or:
// an alternative naive way of getting last 4 chars printed
int l = strlen(first);
char *fourstr = first;
if ( l > 4 ) fourstr += l - 4;
printf("%s", fourstr); // if length is < 4, it prints the whole string.
ИЗМЕНИТЬ
mwstrcmp
- это оболочка, которая разыгрывает указатели, поскольку qsort передает указатели на объект (которые являются указателями...):
int mwstrcmp(const char **a, const char **b)
{
return strcmp(*a, *b);
}
(предупреждения могут быть слишком ленивы, чтобы проверить сейчас...)
Если вы хотите отсортировать строки, сначала сохраните их в массиве и сделайте Bubble Sort. Вы также можете использовать этот алгоритм для сортировки строк в связанном списке.