在C中将Char *转换为大写

时间:2016-02-03 16:05:49

标签: c string pointers strtok

我试图将char *转换为c中的大写字母,但函数toupper()在此处不起作用。

我试图获取temp值的名称,这个名字在冒号之前就是任何东西,在这种情况下它是"测试"然后我想要充分利用这个名称。

void func(char * temp) {
 // where temp is a char * containing the string "Test:Case1"
 char * name;

 name = strtok(temp,":");

 //convert it to uppercase

 name = toupper(name); //error here

}

我得到函数toupper期望int的错误,但收到一个char *。事实是,我必须使用char *,因为这就是函数的用法,(我不能在这里使用char数组,可以吗?)。

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:8)

toupper()会转换一个char

只需使用循环:

void func(char * temp) {
  char * name;
  name = strtok(temp,":");

  // Convert to upper case
  char *s = name;
  while (*s) {
    *s = toupper((unsigned char) *s);
    s++;
  }

}

详细信息:为所有toupper(int)unsigned char定义了标准库函数EOF。由于char可能已签署,因此请转换为unsigned char

某些操作系统支持执行此操作的函数调用:upstr()strupr()

答案 1 :(得分:3)

int toupper(int c);仅适用于单个字符。但是toupper()就是指向字符串的指针。

答案 2 :(得分:3)

这个小功能怎么样?它假定ASCII表示的字符为char,并就地修改字符串。

void to_upper(char* string)
{
    const char OFFSET = 'a' - 'A';
    while (*string)
    {
        *string = (*string >= 'a' && *string <= 'z') ? *string -= OFFSET : *string;
        string++;
    }
}

答案 3 :(得分:1)

toupper()一次处理一个元素(*/1 * * * * /usr/bin/top -u user -n 1 | /bin/grep -v grep | /bin/grep java | /usr/bin/head -n 1 | /bin/awk '{if ($9 > 100) print $1, $9}' | /bin/cut -d'm' -f2 2>&1 >> /etc/file.log 参数,值与int或EOF相同)。

原型:

  

unsigned char

您需要使用循环从字符串一次提供一个元素。

答案 4 :(得分:0)

对于那些想要大写字符串并将其存储在变量中的人(这就是我阅读这些答案时所要寻找的)。

#include <stdio.h>  //<-- You need this to use printf.
#include <string.h>  //<-- You need this to use string and strlen() function.
#include <ctype.h>  //<-- You need this to use toupper() function.

int main(void)
{
    string s = "I want to cast this";  //<-- Or you can ask to the user for a string.

    unsigned long int s_len = strlen(s); //<-- getting the length of 's'.  

    //Defining an array of the same length as 's' to, temporarily, store the case change.
    char s_up[s_len]; 

    // Iterate over the source string (i.e. s) and cast the case changing.
    for (int a = 0; a < s_len; a++)
    {
        // Storing the change: Use the temp array while casting to uppercase.  
        s_up[a] = toupper(s[a]); 
    }

    // Assign the new array to your first variable name if you want to use the same as at the beginning
    s = s_up;

    printf("%s \n", s_up);  //<-- If you want to see the change made.
}

注意:如果要改成小写字符串,请将toupper(s[a])更改为tolower(s[a])