2011-03-31 183 views
3

我试图将小写字母中的字符串转换为大写字母。 我得到了一些错误(访问volation) 什么?将小写字母转换为大写字母

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

+1

如果是作业,请标记为这样。 – MByD 2011-03-31 13:51:34

+0

除了你的bug,你不会增加我 - >无限循环 – 2011-03-31 13:52:04

+1

没有保证所有字母在所有系统上都是按顺序排列的。我住在哪里,我们相信åäö是有效的信件。 – 2011-03-31 13:55:48

回答

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的溢出...

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

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

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

+0

我不明白,我输入的字符串少于9,但它仍然不工作 – yEL155 2011-03-31 13:54:07

+1

@ yEL155:我列出了代码中的几个错误。你修好了第一个,但它仍然不起作用。也许考虑修复其余的... – 2011-03-31 13:57:32

+0

'scanf(“%s”,&str);'不正确,无论如何,请参阅下面的答案 – MByD 2011-03-31 14:02:55

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; 
} 
1

这里有几个错误:

  1. scanf("%s", &str); - 因为str是烧焦的指针,你不需要给它的地址,但是scanf("%s", str);。 (正如sven所说,这是不安全的)
  2. while (str[i] !=0)这是一个无限循环,你应该在while块的末尾增加i
  3. str[i] += -32;将修改任何烧焦你在,你应该检查这是否是一个小写的任何时间,例如:

    如果(STR [1]> = 'A' & & STR [1] < ='z'){ str [i] - = 32; } //无法格式化此行出于某种原因....

  4. printf("%s", str[i])再次是用printf走错了路,因为%s预计char*,并str[i]char。相反,使用printf("%c", str[i])这需要一个字符

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; 
} 
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(); 
} 
+0

请尽量避免仅用代码回答,向您的代码添加一些解释以获得更高质量的答案 – Dreen 2012-10-10 18:20:14

0

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

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