Сортировка чисел в строке в порядке возрастания - C (СИ)
Формулировка задачи:
Вот код:
Исправьте, пожалуйста, часть кода. Срочно!
Выдается вот какой результат:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int p = 0;
int k=0;
char str[]="54 -6 23 -56 27 -15 17 -23 0 -5 6 0 24 -11 82 -90 43 -31";
printf("Iskhodnaya posl. chisel\n");
printf("%s", str);
int l=strlen(str);
int i, j;
for (i = 0; i < l; ++i) {
for (j = l - 1; j > i; j--)
{
if (strchr("1234567890 -", str[j])) {
int t = str[j - 1];
str[j - 1] = str[j];
str[j] = t;
}
}
}
printf("\nKonechnaya posl. chisel\n");
printf("%s", str);
printf("\n");
return 0;
}Решение задачи: «Сортировка чисел в строке в порядке возрастания»
textual
Листинг программы
/* ANSI C 99 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <glib.h>
gint key_cmp(gconstpointer a, gconstpointer b) {
return GPOINTER_TO_INT(a) - GPOINTER_TO_INT(b);
}
gboolean tree_to_string(gpointer key, gpointer value, gpointer data) {
int nKey = GPOINTER_TO_INT(key);
int nValue = GPOINTER_TO_INT(value);
GString * sData = (GString*)data;
for ( int i = 0; i < nValue; ++i )
g_string_append_printf(sData, "%d ", nKey);
return FALSE;
}
#define DELIM " \t\n"
int main(void) {
char buf[BUFSIZ];
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
GTree * tree = g_tree_new(key_cmp);
for ( char * tok = strtok(buf, DELIM); tok; tok = strtok(NULL, DELIM) ) {
int n = atoi(tok);
g_tree_insert(tree, GINT_TO_POINTER(n), GINT_TO_POINTER(GPOINTER_TO_INT(g_tree_lookup(tree, GINT_TO_POINTER(n))) + 1));
}
GString * str = g_string_new("");
g_tree_foreach(tree, tree_to_string, str);
printf("Result: %s\n", str->str);
g_tree_destroy(tree);
g_string_free(str, TRUE);
}
return 0;
}