C-струнная программа - PullRequest
15 голосов
/ 07 июня 2010

В школе мне дали задание написать программу, которая

  • Читает три строки
  • Сохраняет третью строку в динамически выделенной памяти
  • Распечатать последние 4 буквы первого слова в алфавитном порядке.

Вот программа, которая у меня есть. Все строки хранятся в разных переменных, что затрудняет их сортировку. Если бы кто-нибудь мог мне помочь и закончить эту программу, я был бы очень благодарен.

#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;
}

Ответы [ 5 ]

3 голосов
/ 07 июня 2010

Вы можете использовать strcmp() function для сравнения строк.

Также не забудьте очистить память, на которую указывает word3, с помощью функции free()прежде чем вы закончите.

2 голосов
/ 07 июня 2010

Используйте 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;
}
0 голосов
/ 19 июля 2010

Если вы хотите отсортировать строки, то сначала сохраните их в массив и сделайте Bubble Sort .Вы также можете использовать этот алгоритм для сортировки строк в вашем связанном списке.

0 голосов
/ 07 июня 2010

Я бы обобщил, построив массив указателей и отсортировав его с использованием алгоритма минимальной пузырьковой сортировки (или используя 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.

EDIT

mwstrcmp - это оболочка, которая разыменовывает указатели, поскольку qsort передает указатели на объект (которые являются указателями ...):

int mwstrcmp(const char **a, const char **b)
{
  return strcmp(*a, *b);
}

(предупреждения возможно ленивые проверить сейчас ...)

0 голосов
/ 07 июня 2010

Вот программа, включающая код для получения подстроки последних 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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...