c - 如何让用户乘以两个数字以及让他们乘以一个字符串?
问题描述
我的意思是,我正在编写一个程序,其中用户输入一个字符串以及一个'*'
字符和任何数字,程序将用户输入的字符串乘以该数字
Please enter a string you'd like multiplied: horse*3
output:
horsehorsehorse
我想做的是,如果那个字符串恰好是一个数字,那么像往常一样将这两个数字相乘
Please enter a string you'd like multiplied: 2*2
output:
4
我把我的代码放在下面。
int multStr(char *strMult) //strMult is character array for initial input
{
//printf("\nRedirected to here!\n");
printf("Please enter a string and number you'd like to multiply by: ");
scanf(" %[^\n]s", strMult); //User scans in the string intended for multiplication
char string[255]; //Character array for the string part
char number[255]; //Character array for the number the string is to be multiplied by
int counter=0;
int i;
for(i=0;strMult[i] != '*'; i++)
{
string[i] = strMult[i];
counter++;
}
if(string[i] >= '0' && string[i] <= '9')
{
int strNum = myAtoi(string);
printf("String: %d", strNum);
}
else
{
printf("String: %s\n", string);
}
counter++;
for(i=0; strMult[counter] != '\0'; counter++, i++)
{
number[i] = strMult[counter];
}
//number[i+1] = '\0';
printf("Number: %s\n", number);
int num = myAtoi(number);
//printf("Number after convert: %d\n", num);
for(i=0; i<num; i++)
{
printf("%s", string);
}
printf("\n");
return(0);
}
strMult 是我从 main 调用的 char 数组。我无法使用 stdlib,所以我创建了自己的 Atoi 函数
解决方案
你在这里有几个问题。您要做的第一件事是将字符串分成两个char[]
sstring
和number
. 你似乎这样做没问题。接下来你需要做的是检查这string
是一个数字。
if(string[i] >= '0' && string[i] <= '9')
{
int strNum = myAtoi(string);
printf("String: %d", strNum);
}
else
{
printf("String: %s\n", string);
}
这是您正在使用的,但请注意它对程序的其余部分没有影响。你的号码是 if 块的本地号码,然后它就消失了,所以你以后不能使用它。您想要做的是稍后提供该号码。
int isNumber = 1;
int strNum;
for(int k = 0; k < i; k++){
if( string[k] >= '0' && string[k]<='9' ){
//continue checking
}else{
isNumber=0;
}
}
if (isNumber==1){
strNum = myAtoi(string);
} else{
// print your string or some such.
}
请注意,我检查了字符串中的所有字符,而不仅仅是第 i 个位置的字符 '*'。这样,如果有人输入 horse42*2,它就会认为它是一个字符串。
此外,您可以通过在分离数字时检查值来改进这一点。
推荐阅读
- c# - 有没有更快的方法来查找所有文件?
- python - 如何在坐标图上从 Elasticsearch Kibana 的工具提示中删除“计数”?
- python - 在两列的基础上合并两个数据框,同时考虑nan值
- ios - 在组合中使用 Future 接收取消事件
- scala - 添加 Wartrremover 时包含任何警告的推断类型
- xml - 使用 XQuery 删除 xml 节点
- python - 如何在python中创建一个白色的空白opencv框架
- javascript - 这是通过 django 频道流式传输数据的好方法吗?
- ipv4 - 当我尝试计算子网时,我发现子网超出了 0-255 的范围
- microsoft-graph-api - Microsoft Graph:如何从团队用户那里获取“音频记录”、“视频记录”和“屏幕共享记录”?