arrays - 如何在c中将字符串转换为单个字母char
问题描述
我正在尝试对输入的字符串运行 isalpha 检查,但问题是,isalpha 显然仅适用于单个字符。如果我像这样在字符串上运行它,则会出现分段错误。
可能有更优雅的解决方案,但我找不到将字符串与唯一缺失的 char 数组连接起来的方法
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int i;
int main (void)
{
string text = get_string("Text: \n");
int lenght = strlen(text);
if(isalpha(text))
{
printf("Well done");
}
else
{
printf("You suck");
}
所以我尝试将字符串转换为每个单独的 char 数组。尽管可能有更优雅的解决方案,但我找不到将字符串与唯一缺失的 char 数组连接起来的方法
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int i;
int main (void)
{
string text = get_string("Text: \n");
int lenght = strlen(text);
char letter[lenght];
for(i = 0; i < lenght; i++)
{
printf("Letter %i is %c\n", i, letter[i]);
}
}
在继续执行实际功能之前,有什么建议可以对我的字符串运行 isalpha 检查吗?
解决方案
只需编写一个执行此类检查的函数。
它可以如下面的演示程序所示。
#include <stdio.h>
#include <ctype.h>
int is_all_alpha( const char *s )
{
while ( *s && isalpha( ( unsigned char )*s ) ) ++s;
return *s == '\0';
}
int main(void)
{
char *s1 = "Hello";
char *s2 = "2021";
printf( "\"%s\" is %sa valid word\n", s1, is_all_alpha( s1 ) ? "" : "not " );
printf( "\"%s\" is %sa valid word\n", s2, is_all_alpha( s2 ) ? "" : "not " );
return 0;
}
程序输出为
"Hello" is a valid word
"2021" is not a valid word
或者使用string
程序可能看起来像的名称的定义
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
int is_all_alpha( string s )
{
while ( *s && isalpha( ( unsigned char )*s ) ) ++s;
return *s == '\0';
}
int main(void)
{
string s1 = "Hello";
string s2 = "2021";
printf( "\"%s\" is %sa valid word\n", s1, is_all_alpha( s1 ) ? "" : "not " );
printf( "\"%s\" is %sa valid word\n", s2, is_all_alpha( s2 ) ? "" : "not " );
return 0;
}
尽管将函数参数声明为具有类型要好得多const char *
,string
因为在函数is_all_alpha
中指向的字符串没有改变。而且 type 和 typeconst string
不一样const char *
。类型const string
是类型的别名,char * const
这意味着传递的指针本身是常量,而不是指针指向的字符串。
您可以使用 if-else 语句来代替 printf 调用中使用的条件运算符。例如
if ( is_all_alpha( text ) )
{
// all symbols of text are letters
// do something
}
else
{
// text contains a non-alpha symbol
// do something else
}
推荐阅读
- java - 如何找到重叠区域?
- java - FtpInboundFileSynchronizer - 设置过滤器未按预期工作
- c# - 从 DataGridView ID 列构建 ID 列表作为 PostgreSQL 数据库查询过滤器的整数数组
- python - 为什么我们需要再次拟合模型才能获得分数?
- python - 尝试使用 pandas 绘制 CSV 文件时出现错误读数
- python - Python:在两次之间安排任务
- node.js - TypeError:无法读取 ejs 文件未定义的属性“forEach”
- json - 使用熊猫在一列中加载Json数据多个值
- python - 类型错误:sentiment_analysis() 缺少 1 个必需的位置参数:“极性”?
- javascript - 在“新”生成的承诺中“返回承诺”和“用承诺解决”之间的不同行为