Разделить строку на подстроки по заданному символу

1.Вводится строка, выбирается символ и по этому символу строка делится на несколько частей
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "locale.h"
#include "string.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Rus");
char str[100];
gets(str);
printf("Выбирете символ:");
getch();
}
вот как то туго доходит до меня, помогите с соображениями2.Ввести строку, подсчитать кол-во буквенных, цифровых, и специальных символов.вот тут, я обгуглил всё...но на СИ я не нашёл...везде на С++((((
7 ответов

1.
#include <stdio.h>
#include <string.h>
    
/*
    Вводится строка, выбирается символ и по этому символу строка делится на несколько частей
*/
    
int main(void){
    char buf[BUFSIZ];
    char smb[2] = { 0 };
    char *pTok = NULL;
    
    printf("Put some string: ");
    fgets(buf, BUFSIZ, stdin);
    printf("Put some symbol: ");
    scanf("%c", smb);
    
    for ( pTok = strtok(buf, smb); pTok != NULL; pTok = strtok(NULL, smb) )
        printf("%s\n", pTok);
    
    return 0;
}
2. В заголовочном файле найдёте практически всё, что нужно - isdigit(int), isalpha(int), ispunct(int), etc...


хмм...всё таки 2 хотелось бы поподробнее


#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
 
int main(void){
    FILE *fin;
    int c;
    size_t letters, digits, puncts, others;
    
    letters = digits = puncts = others = 0;
    
    if ( (fin = fopen("simple.txt", "r")) == NULL ){
        printf("Can't open file!\n");
        exit(1);
    }
    
    while ( (c = fgetc(fin)) != EOF ){
        if ( isdigit(c) )
            digits++;
        else if ( isalpha(c) )
            letters++;
        else if ( ispunct(c) )
            puncts++;
        else
            others++;
    }
    
    fclose(fin);
    printf("Letters:\t%d\nDigits:\t%d\nPuncts:\t%d\nOthers:\t%d\n", letters, digits, puncts, others);
    
    exit(0);
}


хммм....у меня ни 1 ни 2 не работает.... чтото не так....надо же ввести строку с клавыа ещё я не могу понять, для чего во второй нужен указатель на ФАЙЛ ????и с какого то файла ты читаешь....непонятн


Niki25, 1 - странно. Только-что отсюда скопировал, скомпилил, проверил - всё работает... 2 - да задания у вас похожие. одному в файле посчитай, другому в строке... Вот так в строке считает:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
 
int main(void){
    char buf[BUFSIZ], *pBuf;
    size_t letters, digits, puncts, spaces, others;
        
    while ( printf("Enter string (blank - exit): ") && fgets(buf, BUFSIZ, stdin) ){
        if ( *buf == '\n' )
            break;
        if ( pBuf = strrchr(buf, '\n') )
            *pBuf = '\0';
            
        letters = digits = puncts = spaces = others = 0;
        for ( pBuf = buf; *pBuf; pBuf++ ){
            if ( isdigit(*pBuf) )
                digits++;
            else if ( isalpha(*pBuf) )
                letters++;
            else if ( ispunct(*pBuf) )
                puncts++;
            else if ( isspace(*pBuf) )
                spaces++;
            else
                others++;
        }
        printf("Letters: %d\nDigits:  %d\nPuncts:  %d\nSpaces:  %d\nOthers:  %d\n", letters, digits, puncts, spaces, others);
    }
        
    exit(0);
}


if ( isdigit(*pBuf) )
                                digits++;
                        else if ( isalpha(*pBuf) )
                                letters++;
                        else if ( ispunct(*pBuf) )
                                puncts++;
                        else if ( isspace(*pBuf) )
у меня почему то ругаеца на isdigit,isalpha,ispunct,isspace....(((


у меня почему то ругаеца на isdigit,isalpha,ispunct,isspace....(((
#include <ctype.h>
...