Я работаю над функцией C, которая должна вводить строку и удалять все символы, отличные от буквы, только в начале. Например, если входная строка была "123 456 My dog has fleas."
то выходная строка должна быть: "My dog has fleas."
Как изящно перемещать строку в C до конца
Вот что у меня есть, который работает на примере выше:
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, который завершает строку. Кто-нибудь видит, где я ошибаюсь?
'& str [0]! = NULL' должен прибыть перед' isALetter (str [0]) '. Если 'str == NULL' вы пытаетесь разыменовать его. –
Несвязанный, но 'if (((int) x> = 65 && (int) x <= 90) || ((int) x> = 97 && (int) x <= 122))' -> 'if ((x> = 'A' && x <= 'Z') || (x> = 'a' && x <= 'z')) ' – yano
'& str [0]! = NULL' неверно. & str [0] == str, поэтому он никогда не будет NULL. Вы должны использовать 'str [0]! =' \ 0 ' –