2013-03-19 4 views
0

Будет ли кто-то любезным направлять меня в правильном направлении со следующим кодом, который я написал. В основном я стараюсь, чтобы каждый другой символ в строке печатался в прописной букве, причем все это не учитывало пробелы или другие неалфавые символы.Измените каждый альфа-символ в строке на верхний регистр, используя C

Пример: входная строка = «спасибо за надстройку» следует печатать, как «спасибо за добавить»

int main (void) 
{ 
    char* input = GetString(); 
    if (input == NULL) 
     return 1; 
    for (int i = 0, x = strlen(input); i < x; i+=2) 
     input [i] = toupper(input[i]); 
    printf("%s\n", input); 
    return 0; 
} 

примечание: Я новичок в компьютерной науке и в настоящее время принимает CS50x через edx.org

+2

в чем проблема? – Cairnarvon

ответ

1

Просто используйте isalpha игнорировать другие виды символов:

#include <string.h> 
#include <stdio.h> 
#include <ctype.h> 
int main (void) 
{ 
    char input[] = "thanks for the add"; 
    int alpha_count = 0; 
    for (int i = 0, x = strlen(input); i < x; i++) { 
     if (isalpha(input[i])) { 
     if (alpha_count++ % 2 == 0) 
      input [i] = toupper(input[i]); 
     } 
    } 
    printf("%s\n", input); 
    return 0; 
} 
+0

Зачем нужно называть 'isalpha'? Если я правильно помню, функция 'toupper' только изменяет символ, если его можно преобразовать в верхний регистр (т. Е. Если это буквенный символ). В противном случае он не будет изменен. –

+0

Поскольку OP хочет чередовать между uc/lc на персонажах alpa, оператор if охраняет счетчик. В противном случае пространство также запускает счетчик чередования. – perreal

+0

Ах, правильно. Не читал вопрос достаточно внимательно! –

-1
#include <iostream> 
using namespace std; 

int main() 
{ 
    char st[] = "thanks for the add"; 
    for(int i=0; i<strlen(st); i++) 
     st[i++]=toupper(st[i]); 
    cout<<st<<endl; 
} 
+0

Благодарим вас за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. A [надлежащее объяснение] (https://meta.stackexchange.com/q/114762/349538) значительно улучшит его долгосрочную ценность, показывая, почему это является хорошим решением проблемы и сделает более полезным будущим читателям с другими, подобными вопросами. Пожалуйста, отредактируйте свой ответ , чтобы добавить некоторое объяснение, включая сделанные вами предположения. –