gpt4 book ai didi

c - 消除字符串中以空格结尾的特殊字符

转载 作者:行者123 更新时间:2023-11-30 14:41:59 24 4
gpt4 key购买 nike

我是 C 初学者,但我正在尝试编写一个脚本来读取输入,并忽略特殊字符和空格,输出输入的相反内容,无论字母是否构成回文。

我尝试调整修复函数中循环的长度,因为我认为这就是问题所在,但据我所知, strlen() 正在按预期工作,循环在遇到空格时停止.

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

#define MAX 1000 /* The maximum number of characters in a line of
input
*/
void fix(char str[], char str2[]);
int main()
{
char text[MAX], text2[MAX], text3[MAX], text4[MAX], temp;
int i, j;
int length;

puts("Type some text (then ENTER):");

/* Save typed characters in text[]: */

fgets(text, MAX, stdin);
length = strlen(text) - 1;

strcpy(text2, text);

i = 0;
j = length-1;
while(i < j){
temp = text[i];
text[i] = text[j];
text[j] = temp;
i++;
j--;
}
/* Analyse contents of text[]: */
printf("Your input in reverse is:\n");
printf("%s", text);

fix(text, text3);
printf("%s\n", text3);
fix(text2, text4);
printf("%s\n", text4);
if(strcmp(text4, text3) == 0)
printf("Found a palindrome!\n");
return 0;
}


void fix(char str[], char str2[]){
int i;
for(i = 0; i < strlen(str)-1; i+=1){
if (isalpha(str[i])){
str2[i] = tolower(str[i]);
}
}
}

对于输入“Nurses, run”,反转后的字符串输出正确,但没有输出“Found a palindrome!”

打印文本 3 和 4 分别打印“nur”和“nurses”。

似乎循环在遇到空格时停止,但我不明白为什么,因为它应该根据完整输入的长度进行。

最佳答案

您的 fix 函数中存在问题,导致未定义的行为,因为您仅初始化结果字符串中字母字符的位置。

因为您的要求是忽略非字母字符,所以您需要一个额外的计数器。显然,如果您必须从字符串中删除字符,则 i 将指向错误的字符。因此,您需要计算实际复制到 str2 中的字符数。

void fix(char str[], char str2[])
{
int i, copied = 0;
for(i= 0; str[i] != '\0'; i++) // See note 1
{
if (isalpha(str[i])) {
str2[copied++] = tolower(str[i]); // See note 2
}
}
str2[copied] = '\0'; // See note 3
}

注释:

  1. 无需在每次测试中调用strlen。事实上,您根本不需要调用它——这只是测试字符串的空终止符。
  2. 请注意,copied 在此递增。这可以保证排除某个字符时不会出现间隙。
  3. 必须记住以空值终止新字符串。

关于c - 消除字符串中以空格结尾的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661657/

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