所以我正在编写一个C程序,需要查找从开头和结尾读取的单词(在文本文件中)。到目前为止,我已经编写了一个代码,可以找出单词的第一个和最后一个字母是否相同,但无法确定下一步该做什么。有什么帮助吗? :)
#include <stdio.h>
#include <string.h>
const int CMAX = 1000;
const int Dydis = 200;
void algorythm(char *line);
int main(){
void algorythm(char *line){
char word[256];
char rezMasyv[256];
int i=0;
int j=0;
int k=0;
int z=0;
for (i=0;i<strlen(line);i++){
while (line[i]==' '){
line[j]=' ';
++j;
++i;
}
word[z]=line[i];
++z;
if (line[i+1]==' ' || line[i+1]=='\n' || i+1==strlen(line)){
if (word[0]!=word[z-1]){
for (k=0;k<z;++k){
line[j]=word[k];
++j;
}
}
z=0;
}
}
line[j]='\0';
j=0;
}
char duom[CMAX], rez[CMAX], text[Dydis];
FILE *duomFailas;
FILE *rezFailas;
printf("Enter the name of text file \n");
scanf("%s", duom);
duomFailas=fopen(duom, "r");
if (duomFailas==NULL){
printf ("Error opening text file \n");
system("pause");
return 0;
};
printf("Enter the name of result file\n");
scanf ("%s", rez);
rezFailas=fopen(rez, "w");
if (rezFailas==NULL){
printf ("Error opening results file \n");
system("pause");
return 0;
};
while (fgets(text, sizeof(text), duomFailas)) {
algorythm(text);
fprintf(rezFailas,"%s\n",text);
}
fclose(duomFailas);
fclose(rezFailas);
return(0);
}
文本文件包含许多由空格分隔的单词。我需要删除从开头和结尾读取的单词(lol,samas,wololow等)。
感谢您的帮助;)
答案 0 :(得分:1)
除非你需要按照上面的方式进行,否则肯定有更简单的方法可以做你想做的事情。
一个例子:
#include <stdio.h>
#include <string.h>
int main()
{
char a[100], b[100];
printf("Enter the string to check if it is a palindrome\n");
gets(a);
strcpy(b,a);
strrev(b);
if( strcmp(a,b) == 0 )
printf("Entered string is a palindrome.\n");
else
printf("Entered string is not a palindrome.\n");
return 0;
}
这是一个网站,其中包含预先存在的回文(单词相同的向前和向后)程序,用C语言编写,供您参考:http://www.programmingsimplified.com/c-program-find-palindrome
答案 1 :(得分:0)
你可以有两个指向一个单词的指针,一个指向第一个字母,另一个指向最后一个字母。然后你有两个指针走向彼此,确保它们总是指向相同的角色。
类似的东西:
#include <assert.h>
#include <string.h>
int is_palindrome(const char *s)
{
const char *t;
assert(s);
for (t = s + strlen(s) - 1; t > s; ++s, --t) {
if (*s != *t) {
return 0;
}
}
return 1;
}