gpt4 book ai didi

c - C中如何优雅地遍历一个字符串到最后

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

我正在开发一个 C 函数,它必须输入一个字符串并仅删除开头的所有非字母字符。例如,如果输入字符串是 "123 456 My dog has fleas." 那么输出字符串必须是:"My dog has fleas."

这是我所拥有的,适用于上面的示例:

int isALetter(char x){
// Checks to see is x is an ASCII letter
if( ((int)x>=65 && (int)x<=90) || ((int)x>=97 && (int)x<=122) )
return 0; // TRUE
return 1; // FALSE
}
char* removeNonLettersAtBeginning(char* str){
while( isALetter(str[0]) == 1 && &str[0] != NULL )
str++;
return str;
}

这就是困扰我的地方...如果字符串根本没有字母,代码似乎就不起作用。如果我提交字符串 ""(无字母),那么我会得到“XDG_SESSION_ID=3818”。我不知道那个字符串是什么,但我假设它在系统中是“垃圾”。

但是我的removeNonLettersAtBeginning() 函数应该返回一个“”字符串,一个空字符串。我不知道问题出在哪里,但我敢打赌问题出在这里:

   while( isALetter(str[0]) == 1  &&  &str[0] != NULL )

该行的 "&str[0] != NULL" 部分是为了确保我不会超出字符串的末尾;我正在尝试检查是否遇到了终止字符串的 Null 字符。有人看到我哪里出错了吗?

最佳答案

你对空终止符的检查是错误的,空终止符是 '\0' 而不是 NULL

#include <stdio.h>

int isALetter(char x){
// Checks to see is x is an ASCII letter
if( (x>='A' && x<='Z') || (x>='a' && x<='z') )
return 0; // TRUE
return 1; // FALSE
}
char* removeNonLettersAtBeginning(char* str){
if (str != NULL)
{
while( isALetter(*str) == 1 && *str != '\0' )
str++;
}
return str;
}

int main (void)
{
char test_string[] = " test\n";
char *test_ptr = test_string;

printf ("%s", test_ptr);

test_ptr = removeNonLettersAtBeginning(test_ptr);

printf ("%s", test_ptr);
}

作为旁注,为了使您的代码更具可读性,请避免使用像 6590 这样的魔数(Magic Number)。如图所示,您可以轻松地使用字符来执行此操作:'A''Z'...

关于c - C中如何优雅地遍历一个字符串到最后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41832824/

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