美文网首页
c语言字符串变形

c语言字符串变形

作者: 一路向后 | 来源:发表于2022-06-13 21:24 被阅读0次

1.问题描述

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1\le n \le 10^6 , 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 O(n) , 时间复杂度 O(n)

2.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

char *trans(char *s, int n)
{
    int i, j, k, w = 0, u;
    char *r = NULL;

    if(s == NULL || n == 0)
    {
        return NULL;
    }

    r = (char *)malloc(n+1);

    memset(r, 0x00, n+1);

    k = n - 1;

    for(i=n-1; i>=0; i--)
    {
        if(s[i] == ' ')
        {
            for(j=0; j<k-i-1; j++)
            {
                u = i+j+1;

                if(s[u] >= 'a' && s[u] <= 'z')
                {
                    r[w++] = s[u] - 'a' + 'A';
                }
                else if(s[u] >= 'A' && s[u] <= 'Z')
                {
                    r[w++] = s[u] - 'A' + 'a';
                }
                else
                {
                    r[w++] = s[u];
                }
            }

            r[w++] = ' ';

            k = i;
        }
        else if(i == 0)
        {
            for(j=0; j<k-i; j++)
            {
                u = i + j;

                if(s[u] >= 'a' && s[u] <= 'z')
                {
                    r[w++] = s[u] - 'a' + 'A';
                }
                else if(s[u] >= 'A' && s[u] <= 'Z')
                {
                    r[w++] = s[u] - 'A' + 'a';
                }
                else
                {
                    r[w++] = s[u];
                }
            }

            k = i;
        }
    }

    return r;
}

int main()
{
    char s[1000001] = {0};
    char *q = NULL;
    int n = -1;

    fgets(s, 1000001, stdin);

    n = strlen(s);

    q = trans(s, n);

    if(q)
    {
        printf("%s\n", q);

        free(q);

        q = NULL;
    }

    return 0;
}

3.编译源码

$ gcc -o test test.c -std=c89

4.运行及其结果

$ ./test
This is a sample
SAMPLE A IS tHIS

相关文章

  • c语言字符串变形

    1.问题描述 对于一个长度为 n 字符串,我们需要对它做一些变形。 首先这个字符串中包含着一些空格,就像"Hell...

  • C语言- 字符、字符数组

    字符数组和字符串 C语言中没有字符串这种数据类型,C语言中通过char型数组来替代字符串的功能。C语言中的字符串一...

  • 2018-05-13

    C语言:c语言中没有字符串类型,也没有字符串变量,字符串是放在字符型数组中的。 C语言数变量类型:整型、浮点型、v...

  • Redis 源码简洁剖析 02 - SDS 字符串

    C 语言的字符串函数 C 语言 string 函数[https://devdocs.io/c-strings/],...

  • C++11新特性(20)-用string对象处理文件名

    C风格字符串 从C语言开始,就已经实现了对字符串的支持。为了处理C风格字符串,C语言标准库提供了一组函数,它们被定...

  • C语言 字符串反转

    C语言 之 字符串反转

  • iOS开发系列文章[转]

    C语言 iOS开发系列--C语言之基础知识 iOS开发系列--C语言之数组和字符串 iOS开发系列--C语言之指针...

  • ==大疆-字符串最大

    字符串最大时间限制:C/C++语言 1000MS;其他语言 3000MS内存限制:C/C++语言 65536KB;...

  • Redis数据结构

    1 简单动态字符串 Redis 是用 C 语言写的,但是对于Redis的字符串,却不是 C 语言中的字符串(即以空...

  • Redis5.x底层数据结构之——字符串

    1 简单动态字符串 Redis是用C语言写的,但是Redis的字符串不是 C 语言中的字符串(即以空字符’\0’结...

网友评论

      本文标题:c语言字符串变形

      本文链接:https://www.haomeiwen.com/subject/yucamrtx.html