いくつかのコードで動作します。私は初心者ですので、おそらく超複雑な構文は理解できません。質問には、ユーザーから読み込まれた文字列があります。 "cat dog"とプログラムはそれをパスカルの場合に変更します。 "CatDog"あなたが見ることができるように、各単語の最初の文字は大文字にされ、スペースは削除されます。それは私が問題を抱えている場所です、私はスペースを削除する方法を把握することはできません。私は一時配列を入れることを考えましたが、スコープの問題のために新しい文字列配列を返すことはできません。前もって感謝します。また、私は関数内にとどまる必要があり、新しい関数を作成することはできません。あなたは以下の私のコードを試すことができます文字列をパスカルの場合に変更します。
#include <stdio.>
#include <stdlib.h>
#include <string.h>
char toUpperCase(char ch){ //changes char to uppercase
return ch - 'a'+ 'A';
}
char toLowerCase(char ch){//changes char to lower case
return ch -'A'+'a';
}
void PascalCase(char* word){//"cat dog" "CatDog"
/*Convert to Pascal case
It is safe to assume that the string is terminated by '\0'*/
char temp[100];//do not know how to implement
int i;
if (word[0] >= 97 && word[0] <= 122) {
word[0] = toUpperCase(word[0]);
}
for (i = 1; i < strlen(word); ++i) {
if (word[i] >= 65 && word[i] <= 90) {
word[i] = toLowerCase(word[i]);
}
if (word[i] == ' '){
++i;
if (word[i] >= 97 && word[i] <= 122) {
word[i] = toUpperCase(word[i]);
}
}
}
}
int main(){
char word[100];
printf("Enter phrase:");
fgets(word, 100, stdin);
/*Call PascalCase*/
PascalCase(word);
/*Print new word*/
printf("%s\n", word);
return 0;
}
"スコープの問題により、新しい文字列配列を返すことができません"。動的メモリ割り当てを使用することができます。 'char * temp = malloc(100);'ただし、不要になったときにメモリが解放されるようにしてください。もう一つの共通の慣用句は、関数が呼び出し元が渡すバッファポインタを取り込むことです。 – kaylum
は、65または97のような魔法の数字を使用しません。 '' a''と '' A''は意図をはるかに明確に示し、 a〜zが連続している限り、任意の文字セット –