我正在尝试从输入字符串中对整数和字符串进行排序。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
int main(){
char x[10];
int y;
printf("string: ");
scanf("%s",x);
y=atoi(x);
printf("\n %d", y);
getchar();
getchar(); }
假设输入为123abc1 使用atoi我可以从输入字符串中提取123,我现在的问题是如何提取abc1?
我想将abc1存储在单独的字符变量中。
输入:123abc1 输出:x = 123,一些char变量= abc1我感谢任何帮助。
答案 0 :(得分:2)
如果您希望使用C编程语言概念,请考虑使用strtol
intead atoi
。它会让你知道它停止了什么角色:
另外,永远不要在%s
中使用scanf
,始终指定缓冲区大小(减1,因为%s将在存储输入后添加'\ 0')
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("string: ");
char x[10];
scanf("%9s",x);
char *s;
int y = strtol(x, &s, 10);
printf("String parsed as:\ninteger: %d\nremainder of the string: %s\n",y, s);
}
在C ++中,如果该标记不是错误,则有更简单的方法,例如流I / O.
例如,
#include <iostream>
#include <string>
int main()
{
std::cout << "string: ";
int x;
std::string s;
std::cin >> x >> s;
std::cout << "String parsed as:\ninteger: " << x << '\n'
<< "remainder of the string: " << s << '\n';
}
答案 1 :(得分:0)
如果这是您想要的方式,那么在提取数字之后将其转换回其文本表示,并且该字符串长度将告诉您要找到字符串的开头。所以对于你的特定例子:
char* x = "123abc1"
atoi( x ) -> 123;
itoa/sprintf( 123 ) -> "123", length 3
x + 3 -> "abc1"
你不能用一次scanf来做吗?
scanf( "%d%s", &y, z );