我正在编写使用 ASCII 将小写字符转换为大写字符的 C 函数,但输出不正确
I am writing C function that convert lowercase char to upper case char with using ASCII but Output is not correct
好的,所以我开始研究这个,我有下面的代码;
+我也有 strlen("any string here") func 那 return 任何 str 的 len 十进制只是记住你的想法。
我举一个情人的例子,假设 a,然后 a 将等于 ASCII 中的某个十进制数 table 然后我减去 32 得到 A。
遗憾的是这不起作用,对此有什么想法吗?
感谢您的所有帮助和宝贵时间!
int uppercase(char sent[]) {
for(int i=0; i <= strlen(sent); ++i) {
if(sent[i]>='a' && sent[i]<='z')
sent[i] -= 32;
}
/*
Parsing the string, then making the letters to uppercase.
*/
#include <stdio.h>
#include <limits.h>
int strlen(char s[]){ //String length function
int i;
for (i = 0; s[i] != '[=10=]'; i++);
return i;
}
void uppercase(char sent[]) {
for(int i=0; i < strlen(sent); ++i) {
if(sent[i]>='a' && sent[i]<='z')
sent[i] += 32;
}
printf("%s", sent);
}
这是我全部作品的一个完整标签。当我尝试大写时(“你好世界”);它给我核心转储控制台问题。
该函数被声明为 return 类型 int
但 return 什么都没有。
int uppercase(char sent[]) {
for(int i=0; i <= strlen(sent); ++i) {
if(sent[i]>='a' && sent[i]<='z')
sent[i] -= 32;
}
一般来说,对于处理字符串的函数,for 循环的条件至少应该类似于
for(int i=0; i < strlen(sent); ++i) {
虽然最好把循环写成
for( size_t i = 0, n = strlen(sent); i < n; ++i ) {
然而在函数uppercase
中使用函数strlen
并没有太大的意义。它的调用是多余的。
注意不能更改字符串字面量。任何更改字符串文字的尝试都会导致未定义的行为。
来自 C 标准(6.4.5 字符串文字)
7 It is unspecified whether these arrays are distinct provided their
elements have the appropriate values. If the program attempts to
modify such an array, the behavior is undefined.
另外最好不要使用幻数32
。
函数可以这样写,如下面的演示程序所示。
#include <stdio.h>
char * uppercase( char *s )
{
for ( char *p = s; *p; ++p )
{
if ( 'a' <= *p && *p <= 'z' ) *p = *p & ~' ';
}
return s;
}
int main(void)
{
char s[] = "hello world!";
puts( s );
puts( uppercase( s ) );
return 0;
}
程序输出为
hello world!
HELLO WORLD!
至于函数strlen
那么最好给函数起个别的名字,因为它会和标准的C函数strlen
冲突。而函数本身可以这样定义
size_t string_len( const char *s )
{
const char *p = s;
while ( *p ) ++p;
return p - s;
}
这个会起作用:
#include <stdio.h>
#include <string.h>
void uppercase(char sent[]) {
for (int i = 0; i < (int)strlen(sent); i++) {
if (sent[i] >= 'a' && sent[i] <= 'z') {
sent[i] -= 32;
}
}
}
int main(int argc, char* argv[]) {
if (argc > 1){
uppercase(argv[1]);
puts(argv[1]);
}
return 0;
}
编译时没有任何错误和警告(使用 clang
),即使有选项 -pedantic -Wall -Wextra
.
这段代码可以帮到你
#include <stdio.h>
#include <string.h>
void uppercase(char T[],int k)
{
int i=0;
while(i<k)
{
if(T[i]>='a'&&T[i]<='z')
{
T[i]=(char)((int)T[i]-32);
}
i++;
}
i=0;
while(i<k)
{
printf("%c",T[i]);
i++;
}
printf("\n");
}
int main()
{
char T[]="good morning !";
int k=sizeof(T);
uppercase(T,k);
}
好的,所以我开始研究这个,我有下面的代码;
+我也有 strlen("any string here") func 那 return 任何 str 的 len 十进制只是记住你的想法。
我举一个情人的例子,假设 a,然后 a 将等于 ASCII 中的某个十进制数 table 然后我减去 32 得到 A。
遗憾的是这不起作用,对此有什么想法吗? 感谢您的所有帮助和宝贵时间!
int uppercase(char sent[]) {
for(int i=0; i <= strlen(sent); ++i) {
if(sent[i]>='a' && sent[i]<='z')
sent[i] -= 32;
}
/*
Parsing the string, then making the letters to uppercase.
*/
#include <stdio.h>
#include <limits.h>
int strlen(char s[]){ //String length function
int i;
for (i = 0; s[i] != '[=10=]'; i++);
return i;
}
void uppercase(char sent[]) {
for(int i=0; i < strlen(sent); ++i) {
if(sent[i]>='a' && sent[i]<='z')
sent[i] += 32;
}
printf("%s", sent);
}
这是我全部作品的一个完整标签。当我尝试大写时(“你好世界”);它给我核心转储控制台问题。
该函数被声明为 return 类型 int
但 return 什么都没有。
int uppercase(char sent[]) {
for(int i=0; i <= strlen(sent); ++i) {
if(sent[i]>='a' && sent[i]<='z')
sent[i] -= 32;
}
一般来说,对于处理字符串的函数,for 循环的条件至少应该类似于
for(int i=0; i < strlen(sent); ++i) {
虽然最好把循环写成
for( size_t i = 0, n = strlen(sent); i < n; ++i ) {
然而在函数uppercase
中使用函数strlen
并没有太大的意义。它的调用是多余的。
注意不能更改字符串字面量。任何更改字符串文字的尝试都会导致未定义的行为。
来自 C 标准(6.4.5 字符串文字)
7 It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.
另外最好不要使用幻数32
。
函数可以这样写,如下面的演示程序所示。
#include <stdio.h>
char * uppercase( char *s )
{
for ( char *p = s; *p; ++p )
{
if ( 'a' <= *p && *p <= 'z' ) *p = *p & ~' ';
}
return s;
}
int main(void)
{
char s[] = "hello world!";
puts( s );
puts( uppercase( s ) );
return 0;
}
程序输出为
hello world!
HELLO WORLD!
至于函数strlen
那么最好给函数起个别的名字,因为它会和标准的C函数strlen
冲突。而函数本身可以这样定义
size_t string_len( const char *s )
{
const char *p = s;
while ( *p ) ++p;
return p - s;
}
这个会起作用:
#include <stdio.h>
#include <string.h>
void uppercase(char sent[]) {
for (int i = 0; i < (int)strlen(sent); i++) {
if (sent[i] >= 'a' && sent[i] <= 'z') {
sent[i] -= 32;
}
}
}
int main(int argc, char* argv[]) {
if (argc > 1){
uppercase(argv[1]);
puts(argv[1]);
}
return 0;
}
编译时没有任何错误和警告(使用 clang
),即使有选项 -pedantic -Wall -Wextra
.
这段代码可以帮到你
#include <stdio.h>
#include <string.h>
void uppercase(char T[],int k)
{
int i=0;
while(i<k)
{
if(T[i]>='a'&&T[i]<='z')
{
T[i]=(char)((int)T[i]-32);
}
i++;
}
i=0;
while(i<k)
{
printf("%c",T[i]);
i++;
}
printf("\n");
}
int main()
{
char T[]="good morning !";
int k=sizeof(T);
uppercase(T,k);
}