отделяя строку символов и int от входной строки в c ++ - PullRequest
0 голосов
/ 01 октября 2011

Я пытаюсь отсортировать целые числа и строки из входной строки.

#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 ]

2 голосов
/ 01 октября 2011

Если вы хотите использовать понятия языка программирования C, рассмотрите возможность использования strtol intead из atoi. Это даст вам знать, на каком персонаже он остановился:

Кроме того, никогда не используйте %s в scanf, всегда указывайте размер буфера (минус один, так как% 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 ++, если этот тег не был ошибкой, существуют более простые подходы, такие как потоковый ввод-вывод.

Например,

#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 голосов
/ 01 октября 2011

Если вы хотите идти по этому пути, то после извлечения числа преобразуйте его обратно в текстовое представление, и эта длина строки скажет, что вы должны найти начало строки. Итак, для вашего конкретного примера:

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

Разве вы не можете просто сделать это с одним scanf?

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