我得到了一些幫助,之前修復了我在這個程序中使用的函數之一,但是現在我處於邏輯的喪失之中。如何實現我的字謎和迴文功能來檢查用戶輸入的字詞?
我在這個程序中有三個目的和兩個功能。第一個目的是打印一個用戶向後輸入的句子。第二個目的是檢查句子中的任何單詞是否與另一個單詞相關。第三個目的是檢查是否有任何一個詞是迴文。
我成功完成了第一個目的。我可以向後打印句子。但現在我不確定我應該如何執行我的功能來檢查任何單詞是否是字謎或迴文。
這是代碼;
/*
* Ch8pp14.c
*
* Created on: Oct 12, 2013
* Author: RivalDog
* Purpose: Reverse a sentence, check for anagrams and palindromes
*/
#include <stdio.h>
#include <ctype.h> //Included ctype for tolower/toupper functions
#define bool int
#define true 1
#define false 0
//Write boolean function that will check if a word is an anagram
bool check_anagram(char a[], char b[])
{
int first[26] = {0}, second[26] = {0}, c = 0;
// Convert arrays into all lower case letters
while(a[c])
{
a[c] = (tolower(a[c]));
c++;
}
c = 0;
while(b[c])
{
b[c] = (tolower(b[c]));
c++;
}
c = 0;
while (a[c] != 0)
{
first[a[c]-'a']++;
c++;
}
c = 0;
while (b[c] != 0)
{
second[b[c]-'a']++;
c++;
}
for (c = 0; c < 26; c++)
{
if (first[c] != second[c])
return false;
}
return true;
}
//Write boolean function that will check if a word is a palindrome
bool palindrome(char a[])
{
int c=0, j, k;
//Convert array into all lower case letters
while (a[c])
{
a[c] = (tolower(a[c]));
c++;
}
c = 0;
j = 0;
k = strlen(a) - 1;
while (j < k)
{
if(a[j++] != a[k--])
return false;
}
return true;
}
int main(void)
{
int i = 0, j = 0, k = 0;
char a[80], terminator;
//Prompt user to enter sentence, store it into an array
printf("Enter a sentence: ");
j = getchar();
while (i < 80)
{
a[i] = j;
++i;
j = getchar();
if (j == '!' || j == '.' || j == '?')
{
terminator = j;
break;
}
else if(j == '\n')
{
break;
}
}
while(a[k])
{
a[k] = (tolower(a[k]));
k++;
}
k = 0;
while(k < i)
{
printf("%c", a[k]);
k++;
}
printf("%c\n", terminator);
//Search backwards through the loop for the start of the last word
//print the word, and then repeat that process for the rest of the words
for(j = i; j >= 0; j--)
{
while(j > -1)
{
if (j == 0)
{
for(k=j;k<i;k++)
{
printf("%c", a[k]);
}
printf("%c", terminator);
break;
}
else if (a[j] != ' ')
--j;
else if (a[j] == ' ')
{
for(k=j+1;k<i;k++)
{
printf("%c", a[k]);
}
printf(" ");
break;
}
}
i = j;
}
//Check if the words are anagrams using previously written function
for(i = 0; i < 80; i++)
{
if (a[i] == ' ')
{
}
}
//Check if the words are palindromes using previously written function
return 0;
}
我在想,也許我可以再通過陣列的話通過檢查元素是一個空間搜索,如果是,從搜索的開始空間的指數-1,其中店新數組,重複整個句子的過程,然後在所有數組上調用我的函數。我看到的問題是,我無法真正預測用戶在一個句子中輸入了多少單詞......那麼,如何設置我的代碼以檢查字符串/迴文呢?
謝謝大家!
〜RivalDog
可能是更好的適合[代碼審查網站](http://codereview.stackexchange.com/questions)。 –
您的代碼很難閱讀。你應該使用更高級的函數,如scanf()或fgets(),特別是strtok()。如果使用strtok(),則向後寫入句子非常簡單。我不會責怪你,但是如果你不瞭解strtok(),現在你就知道了。我強烈建議你使用它。有了這段代碼,我懷疑有人會花時間理解它並幫助你。 –
閱讀此[回覆](http://stackoverflow.com/a/17130789/2455888)。你會得到一些想法如何計算字符串中的字數。 – haccks