0

我正在编写一个程序来将小写句子转换为大写。我也想要字符串的长度。我通过(两者)数组和指针来做到这一点。程序如下:-

/* Program to convert the lower case sentence in upper case sentence and also calculate the length of the string */
#include<stdio.h>
main()
{
    char fac='a'-'A',ch[20],*ptr,a[20];int i=0,count=0;
    ptr=ch;

    /* Changing case and printing length by using pointers */
    printf("Enter the required string");
    gets(ptr);
    while(*ptr!='\0')
    {
        *ptr+=fac;   // LINE #1
        ptr++;
        count++;
    }
    puts(ptr);
    printf("%d",count);

    /* Changing case by using arrays */
    printf("Enter the required string");
    gets(ch);
    while(ch[i]!='\0')
    {
        ch[i]+=fac;
        i++;
    }
    puts(ch);
return 0;
}

该程序非常适合打印长度(在指针部分)和更改大小写(在数组部分)。问题是指针的大小写转换。我的印象是 LINE#1 将存储在指针“ptr”处的值增加了所需的数字( 32 )。但是屏幕上什么也没有发生。为什么会这样?请帮忙。

4

3 回答 3

2

您将 ptr 增加到循环中字符串的末尾,然后使用 ptr 打印出字符串 - 它位于字符串的末尾,因此您什么也得不到。将其更改为 puts(ch),我认为它会起作用。哦,是的 - 我想你想要 -= 而不是 += 用于小写到大写的转换。

顺便说一句,在递增之前,您可能需要确保字符在正确的输入范围内。

于 2013-01-14T20:14:30.787 回答
0

一个指针指向一个内存地址。您需要读取地址处的字符,而不是地址本身。当然,如果更改通过指针创建的 char 变量的大小写,则会更改内存中的实际字符。如果这不是您想要的,您需要创建一个临时字符数组或字符串。

于 2013-01-14T20:15:27.833 回答
0

看看你的循环:

while(*ptr!='\0')
{
    ...
    ptr++;
    ...
}
puts(ptr);

您已经递增ptr,直到它的值是 nul 终止符的地址!所以你打印的只是一个空字符串。

ptr相反,在循环之前存储某处的初始值:

char *initial_ptr;
...
initial_ptr = ptr;
while(*ptr!='\0')
{
    ...
    ptr++;
    ...
}
puts(initial_ptr);
于 2013-01-14T20:26:09.873 回答