描述
对于一个长度为 n 字符串,我们需要对它做一些变形。
首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。
比如"Hello World"变形后就变成了"wORLD hELLO"。
数据范围: 1\le n \le 10^61≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)
输入描述:
给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)
返回值描述:
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
示例1
输入:
"This is a sample",16
复制返回值:
"SAMPLE A IS tHIS"
复制
示例2
输入:
"nowcoder",8
复制返回值:
"NOWCODER"
复制
示例3
输入:
"iOS",3
复制返回值:
"Ios"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
//**
*
* @param s string字符串
* @param n int整型
* @return string字符串
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
void strReverse(char *s, int start, int end)
{
//printf("s:%s %d %d\n",s,start,end);
while(start < end){
char tmp = s[start];
s[start] = s[end];
s[end] = tmp;
start++;
end--;
}
return;
}
char* trans(char* s, int n ) {
// write code here
strReverse(s, 0, n-1);
//printf("s1:%s \n",s);
int start = 0;
int end = 0;
for(int i = 0; i < n; i++) {
while (s[i] == ' ' && i < n) {
i++;
}
start = i;
while (s[i] != ' ' && i < n){
i++;
}
end = i - 1;
//printf("start:%d,end:%d\n",start,end);
strReverse(s, start, end);
}
for(int i = 0; i < n; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = toupper(s[i]);
} else if (s[i] >= 'A' && s[i] <= 'Z'){
s[i] = tolower(s[i]);
}
}
//printf("%s\n",s);
return s;
}
int main()
{
char s[] = {" This is a sample "};
int n = strlen(s);
trans(s,n);
return 0;
}
文章知
————————————————
版权声明:本文为CSDN博主「rgdggf」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rgdggf/article/details/124962555