2011-10-01 133 views
0

我想從輸入字符串中排序整數和字符串。從C++中的輸入字符串中分隔字符串和int字符串

#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

如果您想使用C編程語言的概念,那麼可以考慮使用strtol這一翻譯的atoi。它會讓你知道沒有制止什麼字符在:

而且,從來沒有在一個scanf使用%s,始終指定緩衝區的大小(減去之一,自從%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

0

如果這是你想要的方式,那麼在提取數字後將其轉換回其文本表示,並且字符串長度將告訴你要找到字符串的開頭。因此,對於您的特定示例:

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

難道你不能只用一個scanf來完成嗎?

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

我覺得應該是'atoi'而不是'itoa' – phoxis

+0

@phoxis:你說得對,我讓他們倒退。謝謝,修復。 –