如何在 C 中将字母下写更改为大写字母和大写字母更改为大小写字母来反转两个字符串之间的整数



我有一个输入字符串,例如:"Hello 12345 WoRlD"我想把它输出为:"hELLO 54321 wOrLd"

1( 在这里,小写应该转换为大写,反之亦然

2( 反转两个字符串之间的整数

执行后,它将只打印第一个字符串,其余输出将消失

以下是我迄今为止尝试的

#include<stdio.h>
#include<string.h>
char* casechange(char *);
main()
{
    char s[30],*p,*q;
    int i,j;
    printf("Enter string data:");
    scanf("%s",s);
    q=casechange(s);
    printf("Manipulated string data:%sn",s);
}
char* casechange(char *s)
{
    int i,j=strlen(s)-1,num;
    for(i=0;s[i];i++)
    {
        if(s[i]>='a'&&s[i]<='z')
        {
            s[i]-=32;
        }
        else if(s[i]>='A'&&s[i]<='Z')
        {
            s[i]+=32;
        }
    }
    if(s[i]>='0'&&s[i]<='9'&&s[j]>='0'&&s[j]<='9')
    //for(i=0;i<j;i++,j--)
    //{
    {
        num=s[i];
        s[i]=s[j];
        s[j]=num;
    }
    //}
    return s;
}

如何才能做到这一点?

"执行后只打印第一个字符串,其余输出消失"的问题是:

scanf("%s",s);

scanf(("%s"格式字符串告诉scanf读取字符串,但只能读取到第一个空格。因此,如果您输入:

 "Hello 12345 WoRlD"

scanf("%s",s(将只将"Hello"复制到"s"中。

要解决此问题,请更改:

scanf("%s",s);

对此:

fgets(s, sizeof(s), stdin);

但是,fgets((可能会在字符串末尾留下不需要的'\n'。不需要的"\n"可以通过在fgets((之后插入以下代码来消除:

q=strchr(s,'n');
if(q)
   *q = '';

然后输出为:

"hELLO 12345 wOrLd"

扰流板警报!

请参阅我的版本"casechange((",它也会反转数字。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* casechange(char *);
int main(){
    char s[30];
    printf("Enter string data:");
    scanf("%29[^n]",s);//%s : separated by white space
    casechange(s);
    printf("Manipulated string data:%sn", s);
    return 0;
}
char* casechange(char *s){
    int i;
    for(i=0;s[i];i++){
        if(islower(s[i]))
            s[i] = toupper(s[i]);
        else if(isupper(s[i]))
            s[i] = tolower(s[i]);
        else if(isdigit(s[i])){
            int j, n;
            char num[30];
            sscanf(&s[i], "%29[0123456789]%n", num, &n);
            for(j=0;j<n;++j)
                s[i+j] = num[n-j-1];
            i+=n-1;
        }
    }
    return s;
}

else if(isdigit(s[i])){
    int j, n;
    char num;
    sscanf(&s[i], "%*[0123456789]%n", &n);
    for(j=0;j<n/2;++j){
        num = s[i+j];
        s[i+j] = s[i+n-j-1];
        s[i+n-j-1] = num;
    }
    i+=n-1;
}

最新更新