Так что мне нужно сделать строку в верхнем регистре + удалить из нее пробелы. Однако он не работает, если строка содержит числа, окончательная печать печатает некоторые символы не-ascii. Как мне заставить его работать? Я попытался сделать это с функциями isalpha()
и isdigit()
, но результат тот же.c - Как сделать целую строку в верхнем регистре, если она содержит числа?
#include <stdio.h>
#include <ctype.h>
int main(){
int i = 0;
char c[100];
char str[] = "Hello8 world";
while(str[i]){
if (str[i]!=' '){
if (str[i] >= '0' && str[i] <= '9'){
c[i]=str[i];
}
else{
c[i]=(toupper(str[i]));
}
i++;
}
}
printf("%s", c);
return(0);
}
«Он, однако, не работает, если строка содержит цифры, окончательная печать печатает некоторые символы не-ascii». - Это не то, что делает ваш код. Ваш код для строки, заданной в вашем вопросе, вводит бесконечный цикл. Пожалуйста, выберите * который * код, в котором вам нужна помощь. Это этот код? Затем сделайте текст вопроса совпадающим с поведением кода. Это какой-то другой код? Затем отправьте другой код. – hvd
Вы делаете * не * необходимо делать номера в специальном случае. ['toupper'] (http://en.cppreference.com/w/c/string/byte/toupper) только изменяет алфавитные символы и оставляет все остальные неизменными. – usr2564301
@hdv Вы правы, я как бы ожидал часть, которая, как предполагается, не позволяет пробелу перейти в новую строку для работы. Бесконечный цикл вызван if (str [i]! = '') {, Что бы вы предложили? –