[英]Character Pointers with Palindrome Checker in C
這是我寫的代碼,用於檢查字符串是否是回文。 我需要修改這段代碼,以便它在其中使用字符指針。 有人可以給我一些建議/提示......或者告訴我該怎么做? 謝謝
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(){
char string1[20];
int i, length;
int flag = 0;
printf("Enter a string: ");
scanf("%s", string1);
length = strlen(string1);
for(i=0;i < length ;i++){
if(toupper(string1[i]) != toupper(string1[length-i-1])){
flag = 1;
break;
}
}
if (flag)
printf("%s is not a palindrome \n\n", string1);
else
printf("%s is a palindrome \n", string1);
return 0;
}
在您的代碼中,您使用string1[i]
從字符串的開頭訪問當前元素,並使用string1[length-i-1]
從字符串的末尾訪問當前元素。 你可以創建兩個指針, pb
和pe
,然后將它們朝向彼此移動。
要定義指針,請使用:
char *pb = &string1[0]; // Or just string1, compiler will convert it to pointer
char *pe = &string1[length-1];
為了推進彼此的指針,使用pb++
和pe--
。 要查看指針是否相互交叉,請檢查pb < pe
。 目前,您的程序檢查字符串兩次; 沒有必要這樣做 - 一旦pe
變得小於或等於pb
,你就可以停止。 要訪問當前指針指向的字符,請使用
toupper(*pb) != toupper(*pe)
您可以將檢查與推進指針相結合,如下所示:
toupper(*pb++) != toupper(*pe--)
注意:使用%s
是不安全%s
,因為當用戶在string1
緩沖區溢出結果中輸入的字符多於擬合時。 您應該指定緩沖區的長度,如下所示:
scanf("%19s", string1); // Leave one char for null terminator
我不確定我是否完全理解這個問題,但我認為這可以解決這個問題。 你實際上是在使用字符指針。 char string1 [20]與char * string1相同。 不同之處在於您基本上已將指針指向一塊內存。 您可以通過這種方式訪問字符串。
char string[20] = "foo";
printf("%c\n", string[0]); // will print 'f'
printf("%c\n", *string); // will also print 'f'
printf("%c\n", string[1]); // will print the first 'o'
printf("%c\n", *(string + 1)); // will also print the first 'o'
與char *它是這樣的
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char string1[20];
int i, length;
int flag = 0;
printf("Enter a string: ");
scanf("%s", string1);
length = strlen(string1);
char *start=string1;
char *end=&string1[length-1];
//only check upto half
for(i=0;i <= (length-1)/2 ;i++)
{
if(toupper(*(start+i)) != toupper(*(end-i)))
{
flag = 1;
break;
}
}
if (flag)
printf("%s is not a palindrome \n\n", string1);
else
printf("%s is a palindrome \n", string1);
return 0;
}
我們只是將原始字符串復制到另一個數組,然后使用strrev()來反轉復制的字符串,然后最終將原始字符串與反向字符串進行比較?
像這樣
1.get new string
2.copy string to new array
3.reverse the copied string using strrev
4.use strcmp to check if both are same or not?
這似乎更容易(我是一個初學者所以如果我錯了請糾正我)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.