你有两种问题:
- 一个逻辑相关的
- 一个 C++ 相关的
逻辑是:
(1) 是 alpha 字符串 <=>所有字符都是 alpha
对立
(2) is not alpha string <=> 它至少存在一个非 alpha char
因此代码类似于:
For all char c in string
if c is not char return false <--- (2 in action)
End for
return true <--- (1 in action)
您必须在 C 或 C++ 之间进行选择。请不要像在 C 中那样使用 C++ 来编写代码。
如果您想学习 C++,站点https://en.cppreference.com/w/是一个很好的信息来源。
一个可能的 C++ 解决方案如下:
#include <string>
#include <iostream>
bool isAlphaStr(const std::string& to_check)
{
for(auto c:to_check)
if(!std::isalpha(c)) return false;
return true;
}
int main()
{
char string_1[]="Hello world!";
std::string string_2{"Hello"};
std::cout << "\nIs alpha? " << std::boolalpha << isAlphaStr(string_1);
std::cout << "\nIs alpha? " << std::boolalpha << isAlphaStr(string_2);
}
为了比较 C++ 风格和 C 风格,我添加了一个纯 C 版本:
#include <string.h>
#include <ctype.h> // for isalpha
#include <stdio.h>
#include <stdbool.h>
bool isAlphaStr(const char *const to_check)
{
const size_t n = strlen(to_check);
for(size_t i=0;i<n;++i)
if(!isalpha(to_check[i])) return false;
return true;
}
int main()
{
char string_1[]="Hello world!";
char string_2[]="Hello";
printf("\nIs alpha? %d", isAlphaStr(string_1));
printf("\nIs alpha? %d", isAlphaStr(string_2));
}
关于 Wyck 评论,这里是带有bool alphabetic
变量的版本:
C++:
#include <string>
#include <iostream>
#include <type_traits>
bool isAlphaStr(const std::string& to_check, bool alphabetic)
{
if(to_check.empty()) return alphabetic;
for(auto c:to_check)
if(!std::isalpha(c)) return false;
return true;
}
int main()
{
char string_1[]="Hello world!";
std::string string_2{"Hello"};
std::cout << "\nIs alpha? " << std::boolalpha << isAlphaStr(string_1,false);
std::cout << "\nIs alpha? " << std::boolalpha << isAlphaStr(string_2,false);
}
C:
#include <stdio.h>
#include <stdbool.h>
bool isAlphaStr(const char *const to_check, bool alphabetic)
{
const size_t n = strlen(to_check);
if(!n) return alphabetic; // empty string special case
for(size_t i=0;i<n;++i)
if(!isalpha(to_check[i])) return false;
return true;
}
int main()
{
char string_1[]="Hello world!";
char string_2[]="Hello";
printf("\nIs alpha? %d", isAlphaStr(string_1,false));
printf("\nIs alpha? %d", isAlphaStr(string_2,false));
}