#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(){
char S[10007];
scanf("%[^\n]", S); getchar();
int i = 0;
char u;
while(S[i]){
u = toupper(S[i]);
if(strcmp(u, "I") == 0){
u = '1';
}
else if(strcmp(u, "R") == 0){
u = '2';
}
else if(strcmp(u, "E") == 0){
u = '3';
}
else if(strcmp(u, "A") == 0){
u = '4';
}
else if(strcmp(u, "S") == 0){
u = '5';
}
else if(strcmp(u, "G") == 0){
u = '6';
}
else if(strcmp(u, "T") == 0){
u = '7';
}
else if(strcmp(u, "B") == 0){
u = '8';
}
else if(strcmp(u, "P") == 0){
u = '9';
}
else if(strcmp(u, "O") == 0){
u = '0';
}
printf("%s", u);
i ;
}
return 0;
}
我遇到了一種情況,我需要將輸入的字串設為大寫,然后將一些大寫字母更改為以下數字(示例輸入:im waterswell,otuput:1M W4T325W33L)所以我創建了程式,但它回傳以下錯誤:從 'char' 到 'const char*' [-fpermissive] 的無效轉換。誰能幫我?謝謝你
uj5u.com熱心網友回復:
strcmp用于比較字串,而不是單個字符。簡單地if (u == 'I')使用并在您擁有strcmp的任何地方使用它(注意引號更改 - 我們需要一個字符,而不是字串文字)。
另外,printf("%s", u);錯了,你需要%c列印一個char.
uj5u.com熱心網友回復:
您從什么來源學習 C ?這更像是我對 C 的期望:
#include <string>
#include <iostream>
#include <unordered_map>
// lookup table
static std::unordered_map<char, char> mapping
{
{'I','1'}, {'i','1'},
{'R','2'}, {'r','2'},
{'E','3'}, {'e','3'},
{'A','4'}, {'a','4'},
{'S','5'}, {'s','5'},
{'G','6'}, {'g','6'},
{'T','7'}, {'t','7'},
{'B','8'}, {'b','8'},
{'O','9'}, {'o','9'},
{'U','0'}, {'u','0'},
};
int main()
{
//std::string input;
//std::cin >> input;
std::string input{ "TESTcase" };
for (const char c : input)
{
// check if key can be found
auto it = mapping.find(c);
if (it == mapping.end())
{
// if not cast to upper, std::toupper doesn't return a char
// so cast it.
std::cout << static_cast<char>(std::toupper(c));
}
else
{
// structured binging
const auto&[key, value] = *it; // *it refers to an key value pair in the map
std::cout << value;
}
}
return 0;
}
uj5u.com熱心網友回復:
要比較字符,請使用 == 和字符文字,例如
if (u == 'O')
.
此外,使用格式說明符為空終止字串 ( ) 列印單個 char%s會導致未定義的行為。
您可以只修改 inpur 陣列并一次性列印所有內容...
既然您標記了這個 C ,我將提供一個 C 解決方案:
int main() {
char S[10007];
std::scanf("%[^\n]", S); getchar();
int i = 0;
// modify S to hold the content we want to print
for (auto& c : S)
{
if (c == '\0')
{
// end of string
break;
}
c = std::toupper(c);
switch (c)
{
case 'I':
c = '1';
break;
case 'R':
c = '2';
break;
case 'E':
c = '3';
break;
case 'A':
c = '4';
break;
case 'S':
c = '5';
break;
case 'G':
c = '6';
break;
case 'T':
c = '7';
break;
case 'B':
c = '8';
break;
case 'P':
c = '9';
break;
case 'O':
c = '0';
break;
}
}
std::printf("%s\n", S);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532240.html
標籤:C细绳类型cstdio
