在c ++中用输入字符串分隔字符串和int

时间:2011-10-01 04:46:55

标签: c++ string atoi

我正在尝试从输入字符串中对整数和字符串进行排序。

#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

我感谢任何帮助。

2 个答案:

答案 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);
}

测试:https://ideone.com/uCop8

在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';
}

测试:https://ideone.com/dWYPx

答案 1 :(得分:0)

如果这是您想要的方式,那么在提取数字之后将其转换回其文本表示,并且该字符串长度将告诉您要找到字符串的开头。所以对于你的特定例子:

char* x = "123abc1"
atoi( x ) -> 123;
itoa/sprintf( 123 ) -> "123", length 3
x + 3 -> "abc1"

你不能用一次scanf来做吗?

scanf( "%d%s", &y, z );