문자열과 대소문자가 혼합된 경우(즉, 대문자와 소문자가 모두 포함된 경우) 작업은 대문자인 경우 첫 번째 문자를 소문자로 바꾸는 것입니다.
간단한 예를 통해 깊이 이해해 봅시다.
"hElLo world"라는 문자열이 주어진 것처럼 첫 번째 문자 'h'는 소문자인 'H'로 변환하고 공백이나 문자열 끝 앞의 모든 문자는 소문자로 바꿔야 합니다.
또한 공백 다음에 첫 번째 문자를 만나면 대문자로 변환해야 합니다.
예
Input: str[] = {“heLlO wORLD”} Output: Hello World Input: str[] = {"sUNIDHi bAnSAL"} Output: Sunidhi Bansal
아래에 사용된 접근 방식은 다음과 같습니다. -
- 이 문제를 해결하기 위해 문자의 ASCII 값을 사용합니다.
- ASCII는 American Standards Code for Information Interchange의 약자로 모든 문자에 관련된 코드가 있음을 의미합니다. 대문자 A-Z와 마찬가지로 65-90의 숫자 값이 지정되고 소문자 a-z는 97-122 범위의 숫자가 지정됩니다. 따라서 이 값을 사용하여 문제를 해결할 것입니다.
- 전체 문자열을 탐색하고
- 첫 번째 문자 또는 공백 '' 뒤의 바로 옆 문자가 a-z 범위에 있는지 확인한 다음 'A'와 'a'의 ASCII 값을 뺀 다음 그 결과를 문자에 추가합니다.
- 첫 번째 문자가 아니거나 공백 바로 뒤의 문자가 아니면 문자가 대문자인지 확인한 다음 소문자로 변환해야 하며 'a' - 'A'를 뺀 결과에 문자 값을 더합니다.
알고리즘
Start In Function int firstupper(char str[], int n) Step 1-> Initialize int i Step 2-> Loop For i = 0 And i<n And i++ If i == 0 && str[i] != ' ' || str[i] != ' ' && str[i-1] == ' ' then, If str[i] >= 'a' && str[i]<='z' then, str[i] = (char)(('A'-'a') + str[i] ) End If Else If str[i] >= 'A' && str[i] <= 'Z' then, str[i] = (char)(str[i] + ('a' - 'A')) End If End Function In Function int main(int argc, char const *argv[]) Step 1-> Declare and initialize char str[] = {"sUNIDHi bAnSAL"} Step 2-> Declare n set as sizeof(str)/sizeof(str[0]) Step 3-> firstupper(str, n) Step 4-> Print "%s\n", str End main
예
#include <stdio.h> int firstupper(char str[], int n) { int i; for(i = 0; i<n; i++) { if (i == 0 && str[i] != ' ' || str[i] != ' ' && str[i-1] == ' ') { if(str[i] >= 'a' && str[i]<='z') { str[i] = (char)(('A'-'a') + str[i] ); } } else if (str[i] >= 'A' && str[i] <= 'Z') { str[i] = (char)(str[i] + ('a' - 'A')); } } return 0; } int main(int argc, char const *argv[]) { char str[] = {"sUNIDHi bAnSAL"}; int n = sizeof(str)/sizeof(str[0]); firstupper(str, n); printf("%s\n", str); return 0; }
출력
Sunidhi Bansal