2013-03-29 27 views
-3

我在C程序中遇到问题。我已经在缓冲区中的字符串,并希望将字符串更改为大写,然后写入套接字或将其标准输出。请在下面的代码中帮助我。如何在程序中将缓冲区字符串更改为大写?

char input[] = buffer; 
int alpha_count = 0; 
for (int i = 0, x = strlen(input); i < x; i++) { 
    if (isalpha(input[i])) { 
    if (alpha_count++ % 2 == 0) 
     input [i] = toupper(input[i]); 
    } 
} 
printf("%s\n", input); 
+2

缺少我相信你有你的理由(只改变每个*其他*字母字符),是否有你遇到的具体问题?你想要*整个*字符串大写?如果是这样,可能会失去'alpha_count'逻辑。 – WhozCraig

+0

'char input [] = buffer;'中的初始化器是可疑的。你是否已经打开了套接字?你有没有想过修改一个字符串文字并崩溃?另外,在数组名和索引方括号之间留出一个空格是非常规的:使用'input [i]'not'input [i]'。 –

回答

1

你的问题是,在本节:

if (isalpha(input[i])) { 
    if (alpha_count++ % 2 == 0) 
    input [i] = toupper(input[i]); 
} 

您需要使用islower想想精心if (alpha_count++ % 2 == 0)目的。这是我想要的使用:

#include <ctype.h> 

void str_upper(char *str) { 
    do { 
     *str = toupper((unsigned char) *str); 
    } while (*str++); 
} 
+1

检查'islower()'不是必需的。如果没有合适的大写转换,'toupper()'由标准定义返回与输入值相同的字符。 – WhozCraig

+0

@WhozCraig确实。谢谢。我不知道我的头脑在哪里,现在:/ – Sebivor

+0

男人,我知道这种感觉太好了。 – WhozCraig

0

你必须修改这个for循环

for (int i = 0, x = strlen(input); i < x; i++) { 
    if (isalpha(input[i])) { 
    if (alpha_count++ % 2 == 0) 
     input [i] = toupper(input[i]); 
    } 
} 

用下面的代码

for (int i = 0, x = strlen(input); i < x; i++) { 
     input [i] = toupper(input[i]); 
} 

toupper()页面cplusplus.com的:

int toupper(int c);

将小写字母转换为大写将c转换为大写 如果c是小写字母并且具有等效大写字母,则等效。 如果没有这样的转换是可能的,返回的值是c不变。

0

为什么不使用_strupr?

_strupr(input); 
+0

因为它不是标准库的一部分。 'strupr()'是POSIX的一部分,'_strupr()'是ISO C++的一部分。 – WhozCraig

+0

你确定'strupr()'是POSIX吗?它不为[POSIX 2008]所知(http://pubs.opengroup.org/onlinepubs/9699919799/toc.htm)。带有前缀'_',它看起来像一个Microfaustian函数。 –

相关问题