c_cpp 从一个文件中搜索palindroms并将其按字母顺序放在另一个文件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 从一个文件中搜索palindroms并将其按字母顺序放在另一个文件中相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int is_pal(char* word) {
size_t len = strlen(word);
char* begin = word;
char* end = word + len - 2; // -2 beacuse we get the newline char as well
if (len == 1) {
return 1;
}
while (begin <= end) {
if (*begin != *end) {
return 0;
}
begin++;
end--;
}
return 1;
}
/*
typedef struct node {
char* data;
struct node *next;
} node;
*/
static int cmp(const void *p1, const void *p2){
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int main(void)
{
char* in = "pals.txt";
char* out = "out_pals.txt";
FILE* finput = fopen(in, "r");
if (finput == NULL) {
perror("fopen");
exit(1);
}
FILE* foutput = fopen(out, "w");
if (foutput == NULL) {
perror("fopen");
exit(1);
}
unsigned long num_of_palindroms = 0;
unsigned long line_len = 0;
char* line = NULL;
// first pass
while ( getline(&line, &line_len, finput) != -1) {
if (is_pal(line)) ++num_of_palindroms;
}
printf("number of palindroms in %s: %d\n", in, num_of_palindroms);
// ----------------------------------------
char** palindrom_arr = malloc(sizeof(char*) * num_of_palindroms);
//second pass
unsigned int ii = 0;
rewind(finput);
while ( getline(&line, &line_len, finput) != -1) {
if (is_pal(line))
{
palindrom_arr[ii] = malloc(sizeof(char) * line_len);
strcpy(palindrom_arr[ii], line);
++ii;
}
}
qsort(palindrom_arr, num_of_palindroms, sizeof(char *), cmp);
int i = 0;
for (;i < num_of_palindroms; ++i) {
fprintf(foutput, "%s", palindrom_arr[i]);
free(palindrom_arr[i]);
}
free(palindrom_arr);
free(line);
fclose(finput);
fclose(foutput);
return 0;
}
以上是关于c_cpp 从一个文件中搜索palindroms并将其按字母顺序放在另一个文件中的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp is_palindrome.c
c_cpp 从文件中读取并做一些事情
HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索
c_cpp 管道示例:从进程中读取字符并在另一个进程中以大写形式显示
B2. Palindrome Game (hard version)(记忆化搜索)
c_cpp 该程序从用户获取一个字符串,并查找该字符串中存在的元音,辅音,数字和空白的总数。