C - 数组,排序和修改

时间:2011-12-29 16:44:55

标签: c arrays io qsort

一直在处理一个关于SO的各种其他问题的任务! 我已经到了舞台,我试图将一个数字附加到一个数组,虽然这一次,代码在参数中传递信息的方式更复杂。

编辑:代码也低于

对此抱歉,但请注意以下代码:http://pastebin.com/8SUjRyZQ

在论坛帖子上放置太多东西。

问题是,它不是附加数字,而只是垃圾,虽然这一次,我真的不明白为什么因为我考虑了我之前关于这个主题的所有问题的建议。

它应该将数字int val附加到void AppendInt函数中的数组,认为它只是附加垃圾。

好吧,在Notepad ++中,它打印Word - PasswordBOH - BOH是一些随机垃圾,它像一个图像,BOH是白色文本,黑色背景。

感谢任何人的帮助!

PS>如果需要,我可以在这里发布代码,但这是一个很大的部分。

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

#define MAXLINES 5000 /* max no. lines to be stored */
#define MAXLEN 1000 /* max length of single line */

char *lineptr[MAXLINES];

void capitalise(char *line);
void decision(int i, char *line, int val);
void writelines(char *lineptr[], int nlines);
void qksort(char *v[], int left, int right);
void swap(char *v[], int i, int j);
void AppendInt(char *line, int val, int length);

int main(int argc, char *argv[]) {

int nlines = 0, j, k, i = 0;
char line[MAXLEN];
FILE *fpIn;

printf("WLO v1.0 Alpha Release - Coded in C - Big Shout to StackOverFlow!\n");
printf("1.QuickSort List.\n");
printf("2.QuickSort - Capitalise Word[0]\n");
printf("3.QuickSort - Capitalise Word[0] - Append X\n");
scanf("%d", &k);

if(k == 3) {
    printf("Enter the value you wish to append (a single Integer): ");
    scanf("%d", &i);
}

fpIn = fopen(argv[1], "rb");
while((fgets(line, 65, fpIn)) != NULL) {
    j = strlen(line);
    if (j > 0 && (line[j-1] == '\n')) {
        line[j-1] = '\0';
    }
    if (j > 8) {
        if(k != 1)
            decision(k, line, i);
        lineptr[nlines++] = strdup(line);
    }
}
qksort(lineptr, 0, nlines - 1);
writelines(lineptr, nlines);
return 0;    
}

void decision(int i, char *line, int val) {
 if(i == 2)
    capitalise(line);
 else if(i == 3)
     AppendInt(line, val, strlen(line));
}

void capitalise(char *line) {
 line[0] = toupper((line[0]));
}

void AppendInt(char *line, int val, int length){
 capitalise(line);
 line[length] = val;
 line[length + 1] = '\0';    
}

void writelines(char *lineptr[], int nlines) {
FILE *fpOut;
int i;
fpOut = fopen("tmp.out", "wb");
for(i = 0; i < nlines; i++)
    fprintf(fpOut, "%s\n", lineptr[i]);   
}

void qksort(char *v[], int left, int right) {     
int i, last;
void swap(char *v[], int i, int j);
if (left >= right) 
        return; 
swap(v, left, (left + right)/2);
last = left;
for (i = left+1; i <= right; i++)
        if (strcmp(v[i], v[left]) < 0)
               swap(v, ++last, i);
        swap(v, left, last);
        qksort(v, left, last-1);
        qksort(v, last+1, right);
}

void swap(char *v[], int i, int j) {
 char *temp;  
 temp = v[i];
 v[i] = v[j];
 v[j] = temp;
}

2 个答案:

答案 0 :(得分:2)

您可以使用sprintf

void AppendInt(char *line, int val, int length) {
    capitalise(line);
    sprintf(line+length, "%d", val);
}

答案 1 :(得分:0)

你认为val不是char,所以它不可打印......

解决这个问题:sprintf(&line[length],"%d",val);

你必须确保为行分配足够的内存以包含val。

相关问题