gpt4 book ai didi

c - 处理C中的下一行字符

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:58 25 4
gpt4 key购买 nike

我写了一个程序来检查两个给定的字符串是否是回文。

它工作正常,但测试用例有时包括一个新行字符附加在字符串的末尾,需要忽略它。例如:

两个传递的字符串是:

india\n
aidni

响应应该是,是的,这些是回文。

我的代码是这样的:

#include <stdio.h>

int main(void)
{
char arr1[100];
char arr2[100];
int i = 0, j = 0;
int len1 = 0, len2 = 0;

scanf("%s", arr1);
scanf("%s", arr2);

while (arr1[i] != '\0')
i++;
len1 = i;

while (arr2[j] != '\0')
j++;
len2 = j;

if (i != j) {
printf("%s", "no");
return 0;
} else {
int count = 0;

for (i = 0; i < len1; i++)
if (arr1[i] == arr2[len1-i-1])
count++;

if (count == len1)
printf("%s", "yes");
else
printf("%s", "no");
}

return 0;
}

以上代码为 indiaaidni 输出“yes”,但为 india\naidni 输出“yes” >.

最佳答案

因此存在大量混淆。

最初并不清楚您输入的 \n 是一个字符还是两个字符。听起来像是两个。

我们该怎么办?

因此,我们需要做的是将两个字符串作为输入,对这些字符串应用过滤器以删除我们感兴趣的字符。然后进行回文测试。

我们如何做到这一点?

我添加了对名为 cleanup() 的新函数的调用。此函数将从给定字符串中删除反斜杠后跟 n 的任何序列。我还清理了结束代码,只需反转其中一个字符串,然后查看它们是否相同。

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

void cleanup(char *s) {
char *source = s;
char *destination = s;

while (*source != '\0')
if (source[0] == '\\' && source[1] == 'n')
source += 2;
else
*destination++ = *source++;
*destination = '\0';
}

void reverse(char *s) {
int len = strlen(s);
int i;

for (i=0; i<len/2; ++i) {
char temp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = temp;
}
}

int main()
{
char arr1[100];
char arr2[100];

scanf("%s", arr1);
scanf("%s", arr2);

cleanup(arr1);
cleanup(arr2);
reverse(arr2);

if (strcmp(arr1, arr2) == 0)
printf("Yes\n");
else
printf("No!\n");
}

运行时:

[3:28pm][wlynch@watermelon /tmp] ./orange 
india\n aidni
Yes
[3:28pm][wlynch@watermelon /tmp] ./orange
ind\nia aidn\ni
Yes
[3:29pm][wlynch@watermelon /tmp] ./orange
blue green
No!

关于c - 处理C中的下一行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com