我正在嘗試使用for帶有 ASCII 表的回圈,通過用 32 減去字母數字來使字串中的每個字符一個一個大寫。但我不能i在 charstr和str2. 我怎樣才能做到這一點?
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define STRLEN 200
void string_lower() {
}
void string_upper(char str) {
char str2;
int length = strlen(str);
for (int i = 0; i < length; i ) {
str2[i] = str[i - 32];
}
}
int main() {
char word[STRLEN] = { 0 };
char word1 = 97;
printf("Write a word");
fgets(word, STRLEN, stdin);
string_upper(word);
return 0;
}
uj5u.com熱心網友回復:
您可以一次使用toupper()大寫一個字符。這將適用于單位元組字符集,例如 ASCII,但不適用于當今非英語腳本中普遍使用的 UTF-8 編碼。
這是一個修改后的版本:
#include <ctype.h>
#include <stdio.h>
#define STRLEN 200
char *string_upper(char *str) {
for (size_t i = 0; str[i] != '\0'; i ) {
str[i] = toupper((unsigned char)str[i]);
}
return str;
}
int main() {
char word[STRLEN];
printf("Enter a word: ");
if (fgets(word, STRLEN, stdin)) {
printf("%s", string_upper(word);
}
return 0;
}
引數必須被強制轉換,(unsigned char)str[i]因為它str[i]具有型別,char并且tolower()像所有函式和宏一樣 from<ctype.h>只為型別的值unsigned char和特殊的負值定義EOF。正如char在某些平臺上可能簽名的那樣,將其直接傳遞給tolower()對于負值(例如'é'和 )將具有未定義的行為'?'。
uj5u.com熱心網友回復:
如果你只想做一個函式來轉換String到upper,也許你可以參考下面的例子。
#include <stdio.h>
#include <ctype.h>
#define STRLEN 200
void string2upper(char *str){
int cursor=0;
while(*(str cursor)!='\0'){
*(str cursor) = toupper(*(str cursor));
cursor ;
}
}
void main() {
char String1[STRLEN];
printf("Write a word:\n");
fgets(String1, STRLEN, stdin);
printf("Before : %s\n", String1);
string2upper(String1);
printf("After : %s\n", String1);
}
對于toupper()功能,我想你可以參考這個鏈接。
這有一個詳細的解釋和簡單的例子來理解。
我覺得知道功能細節比只用好~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338894.html
標籤:C
上一篇:不兼容的指標型別將“char(*)[3]”傳遞給“constchar*”型別的引數
下一篇:yacc中的默認資料型別
