Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Несколько ошибок пр работе со строкой


Автор: SoWa 28.2.2007, 18:54
Задача- посчитать кол-во единиц в строке.

Код

#include <iostream>

int main()
{
    char s;
    int i,c,f;
    
        s=getchar();
        for (i; i<=strlen(s); ++i)
            {
                   if (s[i]=='1')
                      {
                                 c++;
                      }
            }
        printf(c);
        getch;
}


Ошибка в условии цикла, в условии единицы, в выводе.
Вопрос такой: Как использовать strlen, как брать символ от строки и как вывести число?

Использую DevC++

Автор: Fazil6 28.2.2007, 19:12
Код

#include <iostream>
#include <string>
#include <algorithm>
#include <conio.h>

const char simb = '1';
int main()
{
    std::string s;
    std::cin >> s;

    std::cout << std::count(s.begin(), s.end(), simb);
    
         getch();
}

Автор: threef 28.2.2007, 19:17
Цитата


Код

#include <iostream>

int main()
{
    char s;
    int i,c,f;
    
        s=getchar();
        for (i; i<=strlen(s); ++i)
            {
                   if (s[i]=='1')
                      {
                                 c++;
                      }
            }
        printf(c);
        getch;
}




1. getchar() нет в iostream
2. strlen может применяться только к строкам, а у тебя s - отдельный символ
3. операция [] (элемент массива)  может быть применена только к массиву 
4.printf© - вывод по формату, одно число не выведет
5.getch - функция, не хватает скобок ()

Автор: Rockie 28.2.2007, 19:18
SoWa, применительно к твоему коду, к примеру по такому принцыпу:
Код

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    char s[20];
    int c = 0;

    cout<<"Enter string ";
    cin>>s;
    
    int len = strlen(s);
    for (int i=0;i<len;i++)
    {
        if (s[i]=='1')    c++;
    }

    cout<<"\nThere are "<<c<<" '1' symbols in "<<s;

    return 0;
}


Узнаем длину строки в 
Код

int len = strlen(s);

заранее. Для того, чтобы не использовать strlen() в цикле. 


Автор: threef 28.2.2007, 19:18
Дубль выскочил. sorry

Автор: Rockie 28.2.2007, 19:19
хе, успевай только ответить smile
SoWa, чтобы приведенный мною код скомпилился - убери 
Код

#include "stdafx.h"

smile

Автор: SoWa 28.2.2007, 19:25
О! Спасибки! Сейчас я зачащу в этом разделе- начали Си в универе!
Rockie, threef, плюсы )

Автор: Tyjin 28.2.2007, 19:32
на C, без С++ вот так:

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    char s[255];
    int i;
    int c = 0;
    int count = 0;
    
    gets(s);

    for (i = 0; i < strlen(s); i++)
        if (s[i]=='1')
               c++;
                     
    printf("Count=%d",c);
    getch();
    return 0;;
}

Автор: 0lmer 1.3.2007, 08:38
Цитата(Tyjin @  28.2.2007,  19:32 Найти цитируемый пост)
int c = 0;    int count = 0;        gets(s);    for (i = 0; i < strlen(s); i++)        if (s[i]=='1')               c++;



зачем переменная count если ее не использовать?

Автор: yura 1.3.2007, 13:26
для полноты картины - можно так еще smile :

Код


    char char2find = ... ;
    char* source = ... ;
    if ( !char2find || !source ) return;
    int cnt = 0;
    const char* pos = source;
    while( (pos = strchr(pos, char2find)) )
    {    
        pos++;
        cnt++;
    }    

    printf("cnt='%d'\т",cnt);


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)