将小写字母转换为大写字母

时间:2011-03-31 13:48:15

标签: c

我正在尝试将小写字母中的字符串转换为大写字母。 我收到了一些错误(访问声音) 怎么办?

int main()
{
    char str[10];
    int i=0;
    scanf("%s", &str);
    while (str[i] !=0)
    {
        str[i] += -32;
        printf("%s", str[i]);
    }
    return 0;
}

THX

7 个答案:

答案 0 :(得分:5)

  1. 如果输入的字符串长度超过9个字符,scanf()将尝试写入字符串缓冲区的末尾。

  2. 您的while循环永远不会终止,因为您永远不会更改i

  3. 您应该在"%c"调用中使用printf()作为格式字符串,因为您正在编写字符,而不是以空字符结尾的字符串。

答案 1 :(得分:2)

int main()
{
    char str[10];
    int i=0;
    scanf("%s", str);
    while (str[i] != 0)
    {
        str[i] += -32;
            i++;
    }
    printf("%s", str);
    return 0;
}

当然,你必须检查str的溢出......

答案 2 :(得分:2)

正如cprogrammer所说

  

你最好使用toupper

/* toupper example */
#include <stdio.h>
#include <ctype.h>
int main ()
{
  int i=0;
  char str[]="Test String.\n";
  char c;
  while (str[i])
  {
    c=str[i];
    putchar (toupper(c));
    i++;
  }
  return 0;
}

但如果没有,你想按照自己的方式去做

int main()
{
    char str[10];
    int i=0;
    scanf("%s", &str);
    while (str[i]!='\0' && i<10)  
    {// You forgot this: '\0' instead of 0 and also i<10
        str[i] += -32;
        printf("%c", str[i]);//char, not string
        i++; //And this
    }
    return 0;
}

答案 3 :(得分:1)

这里有一些错误:

  1. scanf("%s", &str); - 由于str是指向char的指针,因此您不需要提供其地址,而是scanf("%s", str);。 (正如斯文所说,这是不安全的)
  2. while (str[i] !=0)这是一个无限循环,你应该在while块的末尾增加i
  3. str[i] += -32;会修改您所在的任何字符,您应该随时检查这是否是小写字母,例如:

    if(str [i]&gt; ='a'&amp;&amp; str [i]&lt; ='z'){          str [i] - = 32;     } //由于某种原因无法格式化这一行....

  4. printf("%s", str[i])再次使用printf是错误的,因为%s期望char*,而str[i]char。相反,使用需要char

  5. printf("%c", str[i])

答案 4 :(得分:1)

您可以使用Bitwise AND&)运算符技术制作小写字母大写字母。

char ch = letter & 223; [letter = a-z] // Now ch is all time capital letter

答案 5 :(得分:0)

您最好使用toupper

/* toupper example */
#include <stdio.h>
#include <ctype.h>
int main ()
{
  int i=0;
  char str[]="Test String.\n";
  char c;
  while (str[i])
  {
    c=str[i];
    putchar (toupper(c));
    i++;
  }
  return 0;
}

答案 6 :(得分:0)

#include<stdio.h>
#include<conio.h>
#include<string.h>

void main();
{
    int i, count;
    char str[200];
    clrscr();
    printf("Enter a string");
    scanf("%s", str);
    count = strlen(str);
    for(i=0; i<=count; i++)
    {
        if((str[i] >= 97) && (str[i] <= 122))
        {
            str[i] = str[i] - 32;
        }
    }
    printf("%s", str);
    getch();
}