2016-03-08 2 views
-1

Я создал функцию, чтобы сохранить строку в массиве без пробелов и знаков препинания:магазин строка в массиве

int main() 
{ 
    char arr[1];int b,i=0; 
    bool newl = false; 
    for(;!newl;) 
    { 
     arr[i]=cin.get(); 
     b = arr[i]; 
     if(b>=65&&b<=90) i++; 
     else if(b>=97&&b<=122) i++; 
     if(arr[i]=='\n') newl =true; 
    } 
    for(int j=0;j<i;j++) 
    cout << arr[j]; 
} 

это казалось довольно логика для меня, но когда я тестировал его поведение вратаря получится, как я ожидал например, с 1 символом, это нормально, но более того, это просто неправильно. Это из-за cin.get? Извините im newb. Спасибо.

+0

Почему 'arr' имеет размер 1, то? – Benio

+0

Нет необходимости в целых числах, вы можете использовать, например, 'if (b> 'a')', конечно, char b; – Joel

+0

Я думал, что C++ не имеет проверки привязки, поэтому я просто положил 1 туда. @Joel, я не хочу, чтобы you.i хотел проверить, является ли его алфавит (и форма CAP ofc) –

ответ

0

Вы выделили только один элемент: arr, поэтому доступ к arr[1] или далее запрещен.

std::vector полезен как массив переменной длины.

Также я предлагаю вам использовать isalpha() из библиотеки cctype вместо сравнения с магическими числами, которые относительно трудно понять и зависят от кода символа.

#include <iostream> 
#include <vector> 
#include <cctype> 
using std::cin; 
using std::cout; 

int main() 
{ 
    std::vector<char> arr;int b,i=0; 
    bool newl = false; 
    for(;!newl;) 
    { 
     b = cin.get(); // store the input directly into b 
     if(isalpha(b)) arr.push_back(b); 
     if(b=='\n') newl = true; 
    } 
    for(size_t j=0;j<arr.size();j++) 
     cout << arr[j]; 
} 
+0

Ойпс, это глупая ошибка. Спасибо за совет, но я подумал, что у C++ нет проверки привязки, так почему же он сейчас? –

Смежные вопросы