我试图将小写字母中的字符串转换为大写字母。 我得到了一些错误(访问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
我试图将小写字母中的字符串转换为大写字母。 我得到了一些错误(访问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
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的溢出...
如果超过900个字符输入的字符串长,scanf()
会尝试写超过字符串缓冲区的末尾。
你的while循环永远不会终止,因为你永远不会改变i
。
您应该在printf()
调用中使用"%c"
作为格式字符串,因为您正在写字符而不是以空值终止的字符串。
您更好地使用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;
}
这里有几个错误:
scanf("%s", &str);
- 因为str是烧焦的指针,你不需要给它的地址,但是scanf("%s", str);
。 (正如sven所说,这是不安全的)while (str[i] !=0)
这是一个无限循环,你应该在while块的末尾增加i
。str[i] += -32;
将修改任何烧焦你在,你应该检查这是否是一个小写的任何时间,例如:
如果(STR [1]> = 'A' & & STR [1] < ='z'){ str [i] - = 32; } //无法格式化此行出于某种原因....
printf("%s", str[i])
再次是用printf走错了路,因为%s
预计char*
,并str[i]
是char
。相反,使用printf("%c", str[i])
这需要一个字符
正如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;
}
#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();
}
请尽量避免仅用代码回答,向您的代码添加一些解释以获得更高质量的答案 – Dreen 2012-10-10 18:20:14
您可以使用Bitwise AND(&
)运算符技术将小写字母改为大写字母。
char ch = letter & 223; [letter = a-z] // Now ch is all time capital letter
如果是作业,请标记为这样。 – MByD 2011-03-31 13:51:34
除了你的bug,你不会增加我 - >无限循环 – 2011-03-31 13:52:04
没有保证所有字母在所有系统上都是按顺序排列的。我住在哪里,我们相信åäö是有效的信件。 – 2011-03-31 13:55:48