2013-09-04 3 views
0

У меня есть массивы указателей на массивы char, как показано ниже.Как изменить первую букву на верхний регистр в массиве указателей на строки?

char *ptrArticle[]={"the","a","one","some"}; 

Я пытаюсь рандомизации фразу так:

«Девушка пропускаться под мальчика».

Так что я должен сделать первые слова первого символа в верхнем регистре. Но это не работает. Компилятор не дает никаких ошибок, но не работает так, как предполагалось. Еще строчный. Можете ли вы дать мне совет?

toupper(*ptrArticle[articleRandomIndex]); 




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

int main(void){ 

int articleRandomIndex; 
int nounRandomIndex; 
int verbRandomIndex; 
int prepositionRandomIndex; 
int secondArticleRandomIndex; 
int secondNounRandomIndex; 

char sentence[200]; 
//array of pointers to char arrays 
char *ptrArticle[]={"the","a","one","some"}; 
char *ptrNoun[]={"boy","girl","dog","town","car"}; 
char *ptrVerb[]={"drove","jumped","ran","walked","skipped"}; 
char *ptrPreposition[]={"to","from","over","under","on"}; 
srand(time(NULL)); 

articleRandomIndex=rand()%4; 
nounRandomIndex=rand()%5; 
verbRandomIndex=rand()%5; 
prepositionRandomIndex=rand()%5; 
secondArticleRandomIndex=rand()%4; 
secondNounRandomIndex=rand()%5; 

toupper(*ptrArticle[articleRandomIndex]); 

strcpy(sentence,ptrArticle[articleRandomIndex]); 
strcat(sentence," "); 
strcat(sentence,ptrNoun[nounRandomIndex]); 
strcat(sentence," "); 
strcat(sentence,ptrVerb[verbRandomIndex]); 
strcat(sentence," "); 
strcat(sentence,ptrPreposition[prepositionRandomIndex]); 
strcat(sentence," "); 
strcat(sentence,ptrArticle[secondArticleRandomIndex]); 
strcat(sentence," "); 
strcat(sentence,ptrNoun[secondNounRandomIndex]); 
strcat(sentence,"."); 

puts(sentence); 

getch(); 

} 

ответ

3

Прежде всего, функция toupperвозвращает верхний регистр символов.

Во-вторых, почему бы просто не сделать toupper на первом символе в строке, которую вы создали?

E.g.

sentence[0] = toupper(sentence[0]); 
puts(sentence); 

Таким образом, вы можете использовать свой код рандомизации несколько раз, не изменяя фактическую строку, которую вы используете для построения предложения. Кроме того, вы не будете пытаться изменить строковый литерал, который является только.

+0

Ahh благодарит так много. Как я могу быть немым, чтобы не думать об этом? Иногда программирование пугает мое видение настолько, что я не вижу решения прямо передо мной. – Lyrk

1

toupper возвращает символ; он не изменяет вход. Вам нужно сохранить результат от toupper.

1

Проблема заключается в том, что toupper возвращает символ (в верхнем регистре), и вы не хранить этот символ, предполагая, что это изменит первую букву ptrArticle[]={"the","a","one","some"}; делая

toupper(*ptrArticle[articleRandomIndex]); 

только!

Смежные вопросы